Microsoft JSON シリアライザーと JSON.NET の両方を使用する MVC3 プロジェクトで状況が発生しています。
Microsoft のシリアライザーでは 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]
されません。[DataContract]
クラスに属性が適用されているという事実を無視するようにJSON.NETに渡すオプションはありますか?
注: .NET で JavaScriptSerializer を使用すると、FullName プロパティに対しては正常に機能しますが、DateTimes は壊れています。このクラスに DataContract/DataMember 属性があるという事実を無視し、それらが存在しない場合と同様に、標準のパブリック フィールドのシリアル化を実行するには、JSON.NET が必要です。