我无法理解时使用JContainer,JObject和JToken.我理解由"标准" JObject组成的JProperties,它JToken是所有JToken类型的基本抽象类,但我不明白JContainer.
我正在使用C#,我刚买了LinqPad Pro 5.
我在一个文件中有一个JSON数据源,所以我使用这个语句成功地反序列化了该文件的内容:
string json;
using (StreamReader reader = new StreamReader(@"myjsonfile.json"))
{
json = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
那时,我接受JSON字符串对象并将其反序列化为JObject(这可能是我的错误 - 也许我需要创建jsonWork一个JToken或JContainer?):
JObject jsonWork = (JObject)JsonConvert.DeserializeObject(json);
Run Code Online (Sandbox Code Playgroud)
在我的JSON数据(由JSON表示的字符串)中,我有三个对象 - 顶级对象看起来类似于:
{
"Object1" : { ... },
"Object2" : { ... },
"Object3" : { ... }
}
Run Code Online (Sandbox Code Playgroud)
每个对象都由各种标记(数组,字符串,其他对象等)组成,因此它是动态JSON.(我使用省略号作为占位符,而不是用大量JSON数据混淆这个问题.)
我要处理"Object1","Object2"和"Object3"单独使用LINQ,但是.所以,理想情况下,我想要这样的事情:
// these lines …Run Code Online (Sandbox Code Playgroud) 作为我的问题的后续跟进: JSON.NET:从JProperty Value获取JObject ...
我阅读了链接并消化了上述评论和建议.现在我想知道:有没有一个很好的理由为什么没有"直接"(即简单)方法将JProperty对象的值转换为JObject?到达一个JToken似乎需要做很多工作,然后必须构建if语句等.这不是抱怨额外的工作; 相反,它承认我仍然认为我不明白JToken的真正目的.有一次,所有FedEx软件包首先被路由到孟菲斯:似乎所有对象都可以/应该首先转到JToken然后被分配到实际的目标对象类型.这是一种思考方式吗?
换句话说,是否有充分的理由使用JToken - 或者仅仅是因为许多其他函数返回JToken然后你必须处理它?JSON.NET手册提供了将JToken转换为其他类型的方法(http://www.newtonsoft.com/json/help/html/Operators_T_Newtonsoft_Json_Linq_JToken.htm),但没有提到从JToken转到JObject ...
我发现JObject通常是我想要的,以便使用JSON并从JSON映射到我的.NET类,然后再返回 - 以及执行许多其他操作.我仍然想知道使用JToken对象的令人信服的理由是什么?