Domanda

appena scaricato ServiceStack.Text ad usarlo nella mia ASP.NET. Ho classe con molte proprietà e vorrei serializzare cinque di loro (stringa, intero, binario) per JSON. Qualcuno potrebbe ad esempio messaggio semplice come creare oggetto JSON della mia classe?

È stato utile?

Soluzione

ServiceStack sarà deserializzare tutte le proprietà pubbliche di un POCO per impostazione predefinita.

Se si desidera solo serializzare solo alcune delle proprietà poi si desidera decorare la vostra classe con [DataContract], [DataMember] attributi (nello stesso modo in cui si farebbe se si stesse utilizzando MS DataContractJsonSerializer), ad esempio:

[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; }
}

Quindi è possibile utilizzare i metodi di utilità statiche su JsonSerializer a (De) serializzare esso, o le modalità di estensione più terse, per esempio:

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

Modifica:

Come @Noah menzioni (dai commenti) è anche possibile utilizzare l'attributo [IgnoreDataMember] per escludere una singola proprietà.

Altri suggerimenti

È possibile utilizzare l'attributo [Serializable()] sulla classe personalizzata e quindi:

JavaScriptSerializer serializer = new JavaScriptSerializer();

var Json = serializer.Serialize(myObject);

Per ignorare le proprietà specifiche nel dell'oggetto a cui è serializzazione, è sufficiente posizionare l'attribure [NonSerialized] su di loro.

Aggiornamento:

Dato che si desidera utilizzare ServiceStack per fare il vostro serializzazione, il sito ServiceStack fornisce il seguente esempio:

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

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

Il test di servicestack dimostra che fornendo l'attributo [DataContract] e [DataMember] consente di determinare quale viene serializzato e quali no.

Prova: https: // github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/DataContractTests.cs

oggetti in prova: https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/Support/DdnDtos.cs

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top