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,而obja是Container.
| 归档时间: |
|
| 查看次数: |
16221 次 |
| 最近记录: |