如何省略获取只有属性在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控制每个端点时尚的所有成员(包括不可空)的序列化。