JSON で表された JavaScript オブジェクトを適切な C# クラスに逆シリアル化する必要があります。自動プロパティの優れた機能を考えると、フィールドだけではなく、これらのクラスにそれらを含めることをお勧めします。残念ながら、.NET シリアライゼーション エンジン (少なくともデフォルトでは) は、デシリアライゼーションの自動プロパティを完全に無視し、JavaScript オブジェクトには明らかに存在しないバッキング フィールドのみを考慮します。
バッキング フィールドに名前を付ける標準的な方法がないことを考えると、正直に言うと、「C# バッキング フィールドがあるように見える JavaScript オブジェクトを作成しましょう」というアプローチを気にしたくありません。シリアライゼーション エンジンにバッキング フィールドを何らかの形で無視させ、プロパティを直接使用させることができれば、JavaScript フィールドを C# 自動プロパティにシリアライズできます。残念ながら、これがどのように行われるのか、またはこれがまったく可能かどうかはわかりません。どんなアイデアでも大歓迎です。
編集:ここに例があります:
Javascript:
function Cat()
{
this.Name = "Whiskers";
this.Breed = "Tabby";
}
var cat = new Cat();
これは、「{Name: 'Whiskers'}」にシリアル化されます。
C# クラス:
[Serializable()]
public class Cat
{
public string Name { get; set; }
public string Breed { get; set; }
}
そして、失敗する逆シリアル化コード:
new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream);
また、バッキング フィールドを探しているために失敗したことは、例外から明らかです。
EDIT2 :これが役立つ場合は例外です(内部例外はありません):
System.Runtime.Serialization.SerializationException
<Name>k__BackingField, <Breed>k__BackingField
「必要なデータ メンバー ' ' が見つからなかったため、データ コントラクト タイプ 'Test.Cat' を逆シリアル化できません。」