たとえば、次のようなオブジェクトがあります。
public class Container
{
public object Data { get; set; }
}
そしてそれはこのように使用されます:
Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
上記のインスタンスのシリアル化から取得したJSON文字列Data
プロパティを逆シリアル化すると、ExpandoObjectConverter
を指定しても、ExpandoObject
として逆シリアル化されません。
Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter());
匿名オブジェクトに割り当てられたクラスプロパティを逆シリアル化するにはどうすればよいですか、少なくとも、具体的なタイプではなく、ExpandoObject
として逆シリアル化できますか?
誰かが動的オブジェクトを使用できると答えました。これは私にはうまくいきません。私はこの方法で行くことができることを知っていますが、ExpandoObjectが必要なため、そうではありません。ありがとう。
他のユーザーがJSON文字列をExpandoObject
に逆シリアル化できると答えました。これはこの質問の目的ではありません。動的プロパティを持つ具象型を逆シリアル化する必要があります。 JSON文字列では、このプロパティは連想配列である可能性があります。
これを試して:
_Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
string jsonText = JsonConvert.SerializeObject(container);
var obj = JsonConvert.DeserializeObject<ExpandoObject>(jsonText, new ExpandoObjectConverter());
_
これを行うと、ExpandoObject
の呼び出しからDeserializeObject
が得られることがわかりました。提供したコードの問題は、ExpandoObjectConverter
を提供しているときに、_Json.Net
_にContainer
の逆シリアル化を要求していることだと思います。したがって、ExpandoObjectConverter
は使用されていません。
編集:
Data
プロパティを[JsonConverter(typeof(ExpandoObjectConverter))]
で装飾し、次のコードを使用する場合:
_var obj = JsonConvert.DeserializeObject<Container>(jsonText);
_
次に、Data
プロパティはExpandoObject
に逆シリアル化され、obj
はContainer
です。