我试图获取一个巨大的JSON文件(可以是一个字符串),却不知道我想要读取的数据的实际结构并将其作为C#中的类进行处理。我尝试使用JSON反序列化它,但是我不确定在那之后应该去哪里。我当时在考虑使用Reflections,但不确定我需要什么数据。
我试图反序列化对象,如代码所示。但是我想测试它是否是正确的对象类型,以防它不是我希望失败,但是我似乎无法通过这一部分。我也不确定如何处理支票内的反射。我知道我应该进行迭代,但是不确定对象内部的哪些属性值将包含所需的内容。
string jsonData = sr.ReadToEnd();
dynamic data = JsonConvert.DeserializeObject(jsonData);
if (data is List<dynamic>)
{
data.GetType().GetProperties();
}
我想要一个对JSON文件/字符串中的数据具有全部访问权限的对象。
答案 0 :(得分:1)
我认为您的问题之一是使用JArray而不是List,并且还需要将项目强制转换为JObject。 使用Newtonsoft.Json和Newtonsoft.Json.Linq,然后您可以阅读您的Json作为示例:
string __content = "[ {\"name\": \"person1\" , \"age\": 33} , {\"name\": \"person2\" , \"age\" : 23} ]";
dynamic data = JsonConvert.DeserializeObject(__content);
// make sure you have an array of object
if (data is Newtonsoft.Json.Linq.JArray)
{
int i = 0;
foreach (dynamic item in data)
{
// get the property of the object
JObject currentitem = item as JObject;
if (currentitem != null)
{
// access to value of each property
foreach (JProperty p in currentitem.Properties())
{
Console.WriteLine("[" + i + "] : " + p.Name + ":" + p.Value.ToString());
}
i++;
}
}
}
答案 1 :(得分:-3)
您可以将DeserializeObject
方法与通用类型一起使用。为了确保您要转换为Type。
这意味着您的代码将如下所示:
var data = JsonConvert.DeserializeObject<T>(jsonData);
T 是要解析的类。 如果无法将Json字符串解析到您的类,则此方法将引发异常。 我想这就是您想要的。