2011-06-21 12 views
7

que tienen un objeto que quiero serializar a formato JSON que estoy usando:Cómo excluir algunos miembros de la serialización a Json?

public string ToJson() 
    { 
     JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(); 
     string sJSON = jsonSerializer.Serialize(this); 
     return sJSON; 
    } 

¿Cómo definir algunos campos en "esto" no debe ser serializado?

Respuesta

4

La forma posible es declarar esos campos como private o internal.

La solución alternativa es utilizar la clase DataContractJsonSerializer. En este caso, agrega el atributo DataContract a su clase. Puede controlar los miembros que desea serializar con el atributo DataMember - todos los miembros marcados con él están serializados, y los otros no.

Usted debe reescribir su método toJSON de la siguiente manera:

public string ToJson() 
    { 
     DataContractJsonSerializer jsonSerializer = 
       new DataContractJsonSerializer(typeof(<your class name>)); 
     MemoryStream ms = new MemoryStream(); 
     jsonSerializer.WriteObject(ms, this); 
     string json = Encoding.Default.GetString(ms.ToArray()); 
     ms.Dispose(); 
     return json; 
    } 
2

Mira la clase JavaScriptConverter. Puede register converters personalizar el proceso de serialización/deserialización para tipos de objetos específicos. A continuación, puede incluir las propiedades que desee, sin realizar ningún cambio en la clase original.

+0

Agradable, pero aún seré difícil si quiero que se serialice un miembro de cadena mientras que otro miembro de cadena no lo será. ¿derecho? –

+0

Básicamente devuelve un diccionario de pares clave/valor, por lo que correspondería a su convertidor personalizado simplemente incluir uno y no el otro. Incluso podría serializar cada miembro (o no) en función de su valor. – MikeWyatt

22
+2

+1. Esta es la respuesta correcta. Me alegro de haber leído las respuestas al pie de la página, o me habría perdido esto. Funciona maravillosamente – gilly3

+0

funciona solo para .NET 4.5 :( – karaxuna

+1

@karaxuna, se admite hasta 3.5 (que es cuando se introdujo el JavascriptSerializer) – xr280xr

Cuestiones relacionadas