2011-09-05 22 views
12

Acabo de descargar ServiceStack.Text para usarlo en mi ASP.NET. Tengo clases con muchas propiedades y me gustaría serializar cinco de ellas (cadena, entero, binario) a JSON. ¿Alguien podría publicar un ejemplo simple de cómo crear un objeto JSon de mi clase?ServiceStack.Text cómo serializar la clase a JSon

+0

importación tener en cuenta que aunque es necesario el uso de 'ServiceStack;' en sus importaciones, el método 'ToJson' requiere no sólo un árbitro ServiceStack sino que también requiere una referencia a ServiceStack.Text en su proyecto. – ruffin

Respuesta

17

ServiceStack se deserializar todo propiedades públicas de un POCO por defecto.

Si solo desea serializar solo algunas de las propiedades, entonces desea decorar su clase con los atributos [DataContract], [DataMember] (de la misma manera que si estuviera usando MS DataContractJsonSerializer), por ejemplo:

[DataContract] 
public class MyClass 
{ 
    public string WillNotSerializeString { get; set; } 

    [DataMember] 
    public string WillSerializeString { get; set; } 

    [DataMember] 
    public int WillSerializeInt { get; set; } 

    [DataMember] 
    public byte[] WillSerializeByteArray { get; set; } 
} 

continuación, puede utilizar cualquiera de los métodos estáticos de utilidades en la JsonSerializer a (de) serializar, o los métodos de extensión más lacónicas, por ejemplo:

var dto = new MyClass { WillSerializeString = "some text" }; 
string json = dto.ToJson(); 
MyClass fromJson = json.FromJson<MyClass>(); 

Editar:

Como @Noah menciona (de los comentarios) también puede usar el atributo [IgnoreDataMember] para excluir una sola propiedad.

+1

Del mismo modo, si quiere que todas sus propiedades sean _except_ una, puede decorar esa propiedad con '[IgnoreDataMember]', PERO NO debe decorar la clase con '[DataContract]' en ese caso, o no funcionará como esperado. Acabo de hacer esto con ServiceStack en un proyecto, y me alegré de ver que funcionó. –

+0

Y tenga en cuenta: serialize/deserialize all public> properties <, that does not include> fields <. –

+0

@Quandary Correcto, debe configurar 'JsConfig.IncludePublicFields = true;' para serializar los campos públicos, consulte: http://stackoverflow.com/a/15372520/85785 – mythz

6

Usted puede utilizar el atributo [Serializable()] en su clase personalizada y, a continuación:

JavaScriptSerializer serializer = new JavaScriptSerializer(); 

var Json = serializer.Serialize(myObject); 

Ignorar propiedades específicas en el objeto que está serialización, simplemente coloque el attribure [NonSerialized] en ellos.

Actualización:

Teniendo en cuenta que desea utilizar ServiceStack hacer su serialización, el sitio ServiceStack da el siguiente ejemplo:

var customer = new Customer { Name="Joe Bloggs", Age=31 }; 
var json = JsonSerializer.SerializeToString(customer); 
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json); 

Fuente: http://www.servicestack.net/mythz_blog/?p=344

+2

No quiero usar el serializador de Microsoft porque es muy lento. Pregunto por ServiceStack.Text – Tomas

+1

Si está interesado específicamente en ServiceStack.Text, ¿qué le impide descargar su proyecto de muestra y solo echarle un vistazo? –

+0

El sitio web ServiceStack incluso le muestra cómo usarlo: http://www.servicestack.net/mythz_blog/?p=344 –