Servicestack.TextクラスをJSONにシリアル化する方法
-
26-10-2019 - |
質問
serviceStack.textをダウンロードして、asp.netで使用しました。私は多くのプロパティを備えたクラスを持っていますが、そのうちの5つ(文字列、整数、バイナリ)をJSONにシリアル化したいと考えています。誰かが私のクラスからJSONオブジェクトを作成する方法を簡単に投稿できますか?
解決
ServiceStackは、デフォルトでPoCoのすべての公共特性を脱上します。
いくつかのプロパティのみをシリアル化したい場合は、[DataContract]、[datamember]属性でクラスを飾りたい(MS DataContractJsonserializerを使用している場合と同じ方法で)、例:
[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; }
}
次に、jsonserializerの静的ユーティリティメソッドを(de)シリアル化するか、より多くの簡潔な拡張メソッドのいずれかを使用できます。
var dto = new MyClass { WillSerializeString = "some text" };
string json = dto.ToJson();
MyClass fromJson = json.FromJson<MyClass>();
編集:
@noahが(コメントから)言及しているように、[Ingaroredatamember]属性を使用して単一のプロパティを除外することもできます。
他のヒント
使用できます [Serializable()]
カスタムクラスの属性と次の属性:
JavaScriptSerializer serializer = new JavaScriptSerializer();
var Json = serializer.Serialize(myObject);
シリアル化するオブジェクトの特定のプロパティを無視するには、単に [NonSerialized]
それらの魅力。
アップデート:
ServiceStackを使用してシリアル化を行うことを考えると、ServiceStack Webサイトは次の例を示します。
var customer = new Customer { Name="Joe Bloggs", Age=31 };
var json = JsonSerializer.SerializeToString(customer);
var fromJson = JsonSerializer.DeserializeFromString<Customer>(json);
ServiceStackのテストでは、それを提供することにより [DataContract]
と [DataMember]
属性を使用すると、どの属性がシリアル化されているかを決定できます。
テスト中のオブジェクト: https://github.com/servicestack/servicestack.text/blob/master/tests/servicestack.text.tests/support/ddndtos.cs