How to omit Get only properties in servicestack json serializer?

Hitesh.Aneja picture Hitesh.Aneja · Feb 13, 2013 · Viewed 12k times · Source

I have an object which I am de-serializing using ToJson<>() method from ServiceStack.Text namespace.

How to omit all the GET only propeties during serialization? Is there any attribute like [Ignore] or something that I can decorate my properties with, so that they can be omitted?

Thanks

Answer

mythz picture mythz · Feb 13, 2013

ServiceStack's Text serializers follows .NET's DataContract serializer behavior, which means you can ignore data members by using the opt-out [IgnoreDataMember] attribute

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

    public string Name { get; set; }

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

An opt-in alternative is to decorate every property you want serialized with [DataMember]. The remaining properties aren't serialized, e.g:

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

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

    public string IsIgnored { get; set; }
}

Finally there's also a non-intrusive option that doesn't require attributes, e.g:

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

Dynamically specifying properties that should be serialized

ServiceStack's Serializers also supports dynamically controlling serialization by providing conventionally named ShouldSerialize({PropertyName}) methods to indicate whether a property should be serialized or not, e.g:

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

More examples in ConditionalSerializationTests.cs