我Newtonsoft.Json.JsonConvert.DeserializeObject(string str)用来将字符串翻译成.Net对象.此字符串的实际类型可以是多个,并且没有其他信息指示此字符串的类型.但我可以确认字符串消息是一个公共类的派生类对象,然而Message字段Message可以告诉真实类型,Message有一个字段就好int type.字符串是MessageA或者MessageB或者不同的都是不同的type.
如果我将它翻译成一个Object,我可以在visual studio调试器中看到这个Object完全具有Json字符串中描述的字段.但我无法访问这些字段.并将此对象转换为消息将导致错误的转换失败.
我现在正在做的是首先将字符串翻译成a Message并查看类型,然后我再次翻译.这不是首选.那么我可以将其翻译成可以读取所有数据的内容吗?另一个选项是Dictionary,但我有一些数字字段.还有其他建议吗?
JsonConvert.DeserializeObject(string str),当在JSON对象上使用时,返回一个JObject.您可以直接使用它(例如,用于DeserializeObject<JObject>显式键入),或者作为a dynamic来访问其属性,例如
var data = @"{""type"": 1, ""otherProperty"": ""Hello!""}";
dynamic obj = JsonConvert.DeserializeObject(data);
if (obj.type == 1)
{
Console.WriteLine(obj.otherProperty); // prints Hello!
}
Run Code Online (Sandbox Code Playgroud)
此外,您提到数字字段是使用字典时遇到的问题,但如果您使用字典,则Dictionary<string, dynamic>可能会发现使用它更容易:
var data = @"{""type"": 2, ""otherProperty"": 5}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(data);
if (dict["type"] == 2)
{
int i = (int)dict["otherProperty"]; // type is long, so cast is required if you want an int
Console.WriteLine(i); // prints 5
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |