私はこの作業に長時間を費やしました。他の誰かが私と同じ間違いを犯した場合は、ここに投稿しています。抽象JSONオブジェクトが解析されないのはなぜですか?
だから、状況を再現するために、私は基本的な継承といくつかのクラスだった:今
public abstract class Foo
{
public string Name { get; set; }
}
public class Bar : Foo
{
public int SomethingSpecial { get; set; }
}
public class Baz : Foo
{
public string SomethingMundane { get; set; }
}
を、私はJSON文字列を取り、バックFoo
の具体的な実装を解析することができるようにしたいです、 jsonがどのタイプを表すかを事前に知らなくても。
{
"$type": "MyNamespace.Bar",
"Name": "Resources",
"SomethingSpecial": 42
}
オブジェクトをデシリアライズするとき、あなたは、タイプ処理オプション、およびカスタムバインダを指定することもできます。JSON.Netは、オブジェクトの種類を調べるために$タイプ変数を使用することによって、これを処理しますJsonSerializerSettingsでは、それはオプションです。
私が遭遇した問題は、Webクライアントからjsonをポストすると、オブジェクトがデシリアライズされず、代わりに例外がスローされるか、ASP.NetのPOSTパラメータの場合は値がちょうどnull
となります。