如何省略获取只有属性在servicestack JSON序列化?

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

如何在序列化过程中省略所有GET只有propeties? 有没有像[Ignore]或我可以装饰我的属性的东西,使他们可以省略的属性?

谢谢

ServiceStack的文本序列化器遵循.NET的DataContract序列化器行为,这意味着您可以通过使用选项[IgnoreDataMember]属性来忽略数据成员

 public class Poco { public int Id { get; set; } public string Name { get; set; } [IgnoreDataMember] public string IsIgnored { get; set; } } 

另一种select是用[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" }; 

dynamic指定应该序列化的属性

ServiceStack的序列化器还支持通过提供传统的ShouldSerialize({PropertyName})方法来dynamic控制序列化,以指示属性是否应该序列化,例如:

 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中的更多示例

对于可为空的成员,您还可以在序列化之前将其设置为null。

如果你想创build一个单独的view / 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; } 

我希望有一种方法来dynamic控制每个端点时尚的所有成员(包括不可空)的序列化。