Mat*_*zer 14 c# serialization json.net expandoobject .net-4.5
例如,有一个像下一个的对象:
public class Container
{
public object Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
它以这种方式使用:
Container container = new Container
{
Data = new Dictionary<string, object> { { "Text", "Hello world" } }
};
Run Code Online (Sandbox Code Playgroud)
如果我反序列化从序列化上述实例获得的JSON字符串Data
,即使我提供了该属性ExpandoObjectConverter
,它也不会被反序列化为ExpandoObject
:
Container container = JsonConvert.Deserialize<Container>(jsonText, new ExpandoObjectConverter());
Run Code Online (Sandbox Code Playgroud)
如何反序列化使用匿名对象分配的类属性,或者至少不是具体类型ExpandoObject
?
有人回答说我可以使用动态对象.这对我不起作用.我知道我可以这样做,但事实并非如此,因为我需要一个ExpandoObject.谢谢.
其他一些用户回答我可以将JSON字符串反序列化为ExpandoObject
.这不是这个问题的目标.我需要反序列化具有动态属性的具体类型.在JSON字符串中,此属性可以是关联数组.
nic*_*k_w 27
试试这个:
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());
Run Code Online (Sandbox Code Playgroud)
我发现这样做让我得到了一个ExpandoObject
电话DeserializeObject
.我认为你提供的代码的问题是,当你提供一个ExpandoObjectConverter
,你要求Json.Net
反序列化一个Container
,所以我会想象它ExpandoObjectConverter
没有被使用.
编辑:
如果我用它装饰Data
属性[JsonConverter(typeof(ExpandoObjectConverter))]
并使用代码:
var obj = JsonConvert.DeserializeObject<Container>(jsonText);
Run Code Online (Sandbox Code Playgroud)
然后该Data
属性被反序列化为ExpandoObject
,而obj
a是Container
.
归档时间: |
|
查看次数: |
16221 次 |
最近记录: |