ServiceStack.Text comment sérialiser classe JSon
-
26-10-2019 - |
Question
Il suffit de télécharger ServiceStack.Text pour l'utiliser dans mon ASP.NET. Je classe avec de nombreuses propriétés et voudrais sérialisation cinq d'entre eux (chaîne, entier, binaire) à JSON. Quelqu'un pourrait-il par exemple post simple, comment créer un objet JSon de ma classe?
La solution
ServiceStack sera désérialiser toutes les propriétés publiques d'un POCO par défaut.
Si vous voulez seulement sérialisation que quelques-unes des propriétés vous voulez décorer votre classe avec [DataContract], [DataMember] attributs (de la même manière que vous le feriez si vous utilisez MS DataContractJsonSerializer), par exemple:
[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; }
}
Ensuite, vous pouvez utiliser soit les méthodes utilitaires statiques sur JsonSerializer à (De) serialize, ou les méthodes d'extension plus laconiques, par exemple:
var dto = new MyClass { WillSerializeString = "some text" };
string json = dto.ToJson();
MyClass fromJson = json.FromJson<MyClass>();
Edit:
@Noah mentionne (des commentaires), vous pouvez également utiliser le [IgnoreDataMember] attribut pour exclure une seule propriété.
Autres conseils
Vous pouvez utiliser l'attribut [Serializable()]
sur votre classe personnalisée puis:
JavaScriptSerializer serializer = new JavaScriptSerializer();
var Json = serializer.Serialize(myObject);
Pour ignorer les propriétés spécifiques de l'objet que vous sérialisation, placez simplement le attribure de [NonSerialized]
sur eux.
Mise à jour:
Étant donné que vous souhaitez utiliser ServiceStack pour faire votre sérialisation, le site donne ServiceStack l'exemple suivant:
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
test de servicestack prouve qu'en fournissant l'attribut [DataContract]
et [DataMember]
vous permet de déterminer lequel est en feuilleton et qui ne fonctionne pas.
objets dans le test: https://github.com/ServiceStack/ServiceStack.Text/blob/master/tests/ServiceStack.Text.Tests/Support/DdnDtos.cs