我们在使用 Microsoft JSON 序列化程序和 JSON.NET 的 MVC3 项目中遇到了情况。
每个人都知道微软的序列化器中的 DateTime 基本上被破坏了,所以我们切换到 JSON.NET 来避免这个问题。这很好用,除了我们尝试序列化的一些类是具有 DataContract/DataMember 属性的 POCO。它们是在一个在多个位置引用的程序集中定义的。此外,它们还有一些其他显示属性未标记为 DataMembers 以提高效率。例如,客户
[DataContract]
public class Customer
{
[DataMember]
public string FirstName { get; set;}
[DataMember]
public string LastName { get; set;}
public string FullName
{
get
{ return FirstName + " " + LastName; }
}
}
当此客户通过 WCF 传递时,客户端可以引用该程序集并使用 FullName 就好了,但是当使用 JSON.NET 序列化时,它会发现 FullName 不是 [DataMember]
并且不序列化它。是否有一个选项可以传递给 JSON.NET 来告诉它忽略一个类应用了 [DataContract]
属性的事实?
注意: 在 .NET 中使用 JavaScriptSerializer 可以很好地用于 FullName 属性,但 DateTimes 已损坏。我需要 JSON.NET 来忽略此类具有 DataContract/DataMember 属性的事实,并且只执行标准的公共(public)字段序列化,就像它们不存在时一样。
最佳答案
只需使用 Json.Net 的 OptOut 属性。它将优先于 DataContract。
[DataContract]
[JsonObject(MemberSerialization.OptOut)]
https://stackoverflow.com/questions/11055225/
相关文章:
java - 可以将 Jackson 配置为从所有字符串属性中修剪前导/尾随空格吗?
asp.net-mvc - 如何从 MVC Controller 返回 Json 对象以查看
json - Jackson JSON Marshall 忽略 getter
python - Django: "TypeError: [] is not JSON serial
iOS - 在 swift 中使用 ObjectMapper 映射根 JSON 数组
jquery - AJAX 将 JavaScript 字符串数组发布到 JsonResult 作为
javascript - 如何转换为 D3 的 JSON 格式?