Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to omit Get only properties in servicestack json serializer?

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

like image 971
Hitesh.Aneja Avatar asked Feb 13 '13 16:02

Hitesh.Aneja


1 Answers

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

like image 146
mythz Avatar answered Sep 20 '22 16:09

mythz