[C#]得到了异常访问 JToken 的值时,— — 不能访问子值在 Newtonsoft.Json.Linq.JValue 上

标签: json Linq C#
发布时间: 2017/2/27 6:56:16
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我正在进行一个测试用例,效仿我的 C# 方法。我无法访问使用令牌 ["DocumentID"]JToken 的 DocumentID 属性。我开始到当前页面-"无法访问 Newtonsoft.Json.Linq.JValue 儿童价值"。

string response = "[\r\n  \"{ \\\"DocumentID\\\": \\\"fakeGuid1\\\",\\\"documentNotes\\\": \\\"TestNotes1\\\"}\"\r\n]";
//Response has escape charaters as  this is being returned by a mockMethod which is supposed to return JSon.ToString().

string[] fakeGuidForExecutiveSummary = new string[]{"fakeGuid1"};
string fakeResponseFromExecutiveSummaryProxy = "{ \"DocumentID\": \"fakeGuid1\",\"documentNotes\": \"TestNotes1\"}";

JArray jsonResponse = JArray.Parse(response);
//Value of jsonResponse from Debugger - {[  "{ \"DocumentID\": "fakeGuid1\",\"documentNotes\": \"TestNotes1\"}" ]}

JToken token = jsonResponse[0];
//Value of token from Debugger - { "DocumentID": fakeGuid1","documentNotes": "TestNotes1"}
Assert.AreEqual(fakeGuidForExecutiveSummary[0], token["DocumentID"]);

解决方法 1:

你不要告诉你如何初始化 fakeGuidForExecutiveSummary 。 假设你做它以下列方式︰

        string fakeResponseFromExecutiveSummaryProxy = "{ \"DocumentID\": \"fakeGuid1\",\"documentNotes\": \"TestNotes1\"}";
        var fakeResponse = JToken.Parse(fakeResponseFromExecutiveSummaryProxy);
        var fakeGuidForExecutiveSummary = fakeResponse["DocumentID"];

那么问题就是 fakeGuidForExecutiveSummary JValue JToken JArray 。 您的代码将抛出的异常你看是否你试着按索引访问 (不存在) 的子值。

相反,您需要执行以下操作︰

        string response = @"[{ ""DocumentID"": ""fakeGuid1"",""documentNotes"": ""TestNotes1""}]";
        JArray jsonResponse = JArray.Parse(response);
        JToken token = jsonResponse[0];

        //Value of token from Debugger - { "DocumentID": fakeGuid1","documentNotes": "TestNotes1"}
        Assert.AreEqual(fakeGuidForExecutiveSummary, token["DocumentID"])

更新

给你更新的代码,问题是,您的示例 JSON response 有太多级别的字符串转义︰ \\\"DocumentID\\\" 。 你可能复制到源代码中,显示在 Visual Studio 中的转义的字符串,然后再逃得过一些。

将其更改为

        string response = "[\r\n  { \"DocumentID\": \"fakeGuid1\",\"documentNotes\": \"TestNotes1\"}\r\n]";
赞助商