如何忽略获取servicestack JSON序列唯一的属性?(How to omit Get on

2019-07-19 20:12发布

我有一个对象,其我使用去串行化ToJson<>()方法从ServiceStack.Text命名空间。

如何忽略所有的GET序列中只有化子性质? 有没有像任何属性[Ignore]或东西,我可以用我的装饰性,让他们可以省略?

谢谢

Answer 1:

ServiceStack的文字串行如下.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的串行器还支持动态提供传统命名控制系列化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



Answer 2:

对于可为空的成员,你也有序列化之前,将其设置为空的能力。

如果你想创建一个重复使用几个API调用的单一视图/ API模型这是特别有用。 该服务可以将它设置响应对象之前触摸它。

例:

    public SignInPostResponse Post(SignInPost request)
    {
        UserAuthentication auth = _userService.SignIn(request.Domain, true, request.Username, request.Password);

        // Map domain model ojbect to API model object. These classes are used with several API calls.
        var webAuth = Map<WebUserAuthentication>(auth);

        // Exmaple: Clear a property that I don't want to return for this API call... for whatever reason.
        webAuth.AuthenticationType = null;

        var response = new SignInPostResponse { Results = webAuth };
        return response;
    }

我真希望有一种方式来动态控制对每个端点时尚所有成员(包括非空的)的序列化。



文章来源: How to omit Get only properties in servicestack json serializer?