質問

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);

ソース: http://www.servicestack.net/mythz_blog/?p=344

ServiceStackのテストでは、それを提供することにより [DataContract][DataMember] 属性を使用すると、どの属性がシリアル化されているかを決定できます。

テスト: https://github.com/servicestack/servicestack.text/blob/master/tests/servicestack.text.tests/datacontracttests.cs

テスト中のオブジェクト: https://github.com/servicestack/servicestack.text/blob/master/tests/servicestack.text.tests/support/ddndtos.cs

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top