使用JSON.NET将属性反序列化为ExpandoObject

例如,有一个像下一个的对象:

public class Container { public object Data { get; set; } } 

它以这种方式使用:

 Container container = new Container { Data = new Dictionary { { "Text", "Hello world" } } }; 

如果我反序列化从序列化上面的实例获得的JSON字符串, Data属性,即使我提供ExpandoObjectConverter ,它也不会反序列化为ExpandoObject

 Container container = JsonConvert.Deserialize(jsonText, new ExpandoObjectConverter()); 

如何反序列化使用匿名对象分配的类属性,或者至少不是具体类型作为ExpandoObject

编辑:

有人回答说我可以使用动态对象。 这对我不起作用。 我知道我可以这样做,但事实并非如此,因为我需要一个ExpandoObject。 谢谢。

编辑2:

其他一些用户回答我可以将JSON字符串反序列化为ExpandoObject 这不是这个问题的目标。 我需要反序列化具有动态属性的具体类型。 在JSON字符串中,此属性可以是关联数组。

试试这个:

 Container container = new Container { Data = new Dictionary { { "Text", "Hello world" } } }; string jsonText = JsonConvert.SerializeObject(container); var obj = JsonConvert.DeserializeObject(jsonText, new ExpandoObjectConverter()); 

我发现这样做ExpandoObject我从调用DeserializeObject获得一个ExpandoObject 。 我认为您提供的代码的问题是,当您提供ExpandoObjectConverter ,您要求Json.Net反序列化Container ,因此我可以想象没有使用ExpandoObjectConverter

编辑:

如果我用[JsonConverter(typeof(ExpandoObjectConverter))]装饰Data属性并使用代码:

 var obj = JsonConvert.DeserializeObject(jsonText); 

然后将Data属性反序列化为ExpandoObject ,而objContainer