我有一个对象,其我使用去串行化ToJson<>()
方法从ServiceStack.Text命名空间。
如何忽略所有的GET
序列中只有化子性质? 有没有像任何属性[Ignore]
或东西,我可以用我的装饰性,让他们可以省略?
谢谢
我有一个对象,其我使用去串行化ToJson<>()
方法从ServiceStack.Text命名空间。
如何忽略所有的GET
序列中只有化子性质? 有没有像任何属性[Ignore]
或东西,我可以用我的装饰性,让他们可以省略?
谢谢
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
对于可为空的成员,你也有序列化之前,将其设置为空的能力。
如果你想创建一个重复使用几个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;
}
我真希望有一种方式来动态控制对每个端点时尚所有成员(包括非空的)的序列化。