使用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
,而obj
是Container
。