在'Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: {. Path '', ...'
上搜索至少3个,因此所有这些都追溯到无效的JSON。
我尝试了3个不同的验证器:
[{"Imported": "This registration imported on: 06/20/2016"},{"ContactInfoUpdated": " Street Address2: Suite 222 to Shipping Address2: "}]
,这三个都报告为有效。然而,运行时错误将相同的'遇到的其他文本丢弃... :
if (!string.IsNullOrWhiteSpace(UserComments))
{
JToken addresses;
addresses = JObject.Parse(UserComments).GetValue("CarbonCopy"); //errors here
if (!ReferenceEquals(null, addresses))
{
//stuff
}
}
确定JSON关闭后没有意外字符,这是SQL:
UPDATE dbo.[Order] SET UserComments = '[{"Imported": "This registration imported on: 06/20/2016"},{"ContactInfoUpdated": " Street Address2: Suite 222 to Shipping Address2: "}]' WHERE idOrder =121050
感谢Brian的提示,我发现这篇文章非常有帮助:
使用Jarray从JSON获取价值
我的JSON有些不寻常,因为它是一系列不同的对象。我的" UserComments"字段包含对而不是一系列名称/值对,而 name 保持不变,而是包含对的,其中 name 可以是' profile wastedited ',',em>',' ccrequested ','反馈'等等。
为了适应这种类型的结构,我需要针对 name 属性进行测试:
var fields = JToken.Parse(UserComments);
var isCC = "";
foreach (JObject content in fields.Children<JObject>())
{
foreach (JProperty prop in content.Properties())
{
if (prop.Name == "CarbonCopy")
isCC = prop.Value.ToString();
}
}
resharper告诉我,我可以以上内容为:
foreach (JProperty prop in fields.Children<JObject>().SelectMany(content => content.Properties().Where(prop => prop.Name == "CarbonCopy")))
{
isCC = prop.Value.ToString();
}