如何省略在Servicestack json序列化程序中仅获取属性?

Hit*_*eja 28 json ignore properties servicestack

我有一个对象,我使用ToJson<>()ServiceStack.Text命名空间中的方法反序列化.

如何GET在序列化过程中省略所有唯一的属性?是否有任何属性[Ignore]或类似我可以用我的属性装饰,以便它们可以省略?

谢谢

myt*_*thz 53

ServiceStack的Text序列化程序遵循.NET的DataContract序列化程序行为,这意味着您可以使用opt-out [IgnoreDataMember]属性忽略数据成员

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

    public string Name { get; set; }

    [IgnoreDataMember]
    public string IsIgnored { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

选择加入的替代方法是装饰您想要序列化的每个属性[DataMember].其余属性未序列化,例如:

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

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

    public string IsIgnored { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

最后还有一个不需要属性的非侵入式选项,例如:

JsConfig<Poco>.ExcludePropertyNames = new [] { "IsIgnored" };
Run Code Online (Sandbox Code Playgroud)

动态指定应序列化的属性

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";
    }
}
Run Code Online (Sandbox Code Playgroud)

ConditionalSerializationTests.cs中的更多示例

  • 我必须说第三个选择太棒了!:-)当你必须处理代码时,你无法改变这种方式.我也发现它非常优雅. (3认同)
  • @ErwinMayer是的它只适用于序列化.对OrmLite数据模型使用ServiceStack.DataAnnotations的[Ignore]属性. (2认同)