我们在使用 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 不是 a[DataMember]
并且不会序列化它。是否有一个选项可以传递给 JSON.NET 来告诉它忽略一个类已应用属性的事实[DataContract]
?
注意: 在 .NET 中使用 JavaScriptSerializer 对 FullName 属性效果很好,但 DateTimes 被破坏了。我需要 JSON.NET 来忽略此类具有 DataContract/DataMember 属性的事实,并且只执行标准的公共字段序列化,就像它们不存在时一样。