30

ToJson<>()ServiceStack.Text 名前空間のメソッドを使用して逆シリアル化するオブジェクトがあります。

GETシリアル化中に唯一のプロパティをすべて省略する方法は? [Ignore]プロパティを省略できるように、プロパティを装飾できるような属性はありますか?

ありがとう

4

2 に答える 2

57

ServiceStack の Text シリアライザーは .NET の DataContract シリアライザーの動作に従います。つまり、オプトアウト[IgnoreDataMember]属性を使用してデータ メンバーを無視できます。

public class Poco 
{
    public int Id { get; set; }

    public string Name { get; set; }

    [IgnoreDataMember]
    public string IsIgnored { get; set; }
}

オプトインの代替手段は、シリアル化するすべてのプロパティを で装飾することです[DataMember]。残りのプロパティはシリアル化されません。例:

[DataContract]
public class Poco 
{
    [DataMember]
    public int Id { get; set; }

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

    public string IsIgnored { get; set; }
}

最後に、属性を必要としない邪魔にならないオプションもあります。

JsConfig<Poco>.ExcludePropertyNames = new [] { "IsIgnored" };

シリアル化する必要があるプロパティを動的に指定する

ServiceStack の Serializers はShouldSerialize({PropertyName})、プロパティをシリアル化する必要があるかどうかを示す従来の名前のメソッドを提供することで、動的にシリアル化を制御することもサポートしています。次に例を示します。

public class Poco 
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string IsIgnored { get; set; }

    public bool? ShouldSerialize(string fieldName)
    {
        return fieldName == "IsIgnored";
    }
}

ConditionalSerializationTests.csのその他の例

于 2013-02-13T18:00:38.993 に答える