【问题标题】:C#: Json to Object: Getting error ex = {"Unexpected character encountered while parsing value: {. Path 'result', line 1, position 12."}C#:Json 到对象:出现错误 ex = {“解析值时遇到意外字符:{。路径‘结果’,第 1 行,位置 12。”}
【发布时间】:2017-11-06 20:45:42
【问题描述】:

我不确定我的班级设置是否错误或没有导致错误。我对使用 Json 很陌生。

功能代码:

Response = OpenIDM.GetUserInformation(email, fields);
            LDAPMembership = JsonConvert.DeserializeObject<LDAPMembership>(Response);

            string id = LDAPMembership._id;

类:

public class LDAPMembership
{
    public string[] result { get; set; }
    public string _id { get; set; }
    public string _rev { get; set; }
    public string[] ahaMemberGroup { get; set; }
    public string[] ahaDrupalPermissions { get; set; }
    public string resultCount { get; set; }
    public string pagedResultsCookie { get; set; }
    public string totalPagedResultsPolicy { get; set; }
    public string totalPagedResults { get; set; }
    public string remainingPagedResults { get; set; }
}

Json 字符串:

{\"result\":[{\"_id\":\"98d0d0b9-9506-40b4-84c4-e005d4bc25ec\",\"_rev\":\"1\",\"ahaMemberGroup\":[\"AONE\",\"AHA\"]}],\"resultCount\":1,\"pagedResultsCookie\":null,\"totalPagedResultsPolicy\":\"NONE\",\"totalPagedResults\":-1,\"remainingPagedResults\":-1}

抛出异常: 解析值时遇到意外字符:{。路径“结果”,第 1 行,位置 12。"}

我怀疑我没有在课堂上正确设置“结果”。我四处搜索,发现了一个类似的问题并尝试了响应,但没有奏效。

在这一行抛出错误:

LDAPMembership = JsonConvert.DeserializeObject<LDAPMembership>(Response);

【问题讨论】:

  • 所有这些反斜杠是用调试器显示 json 的结果,还是你的 json 文件实际上包含这些字符?
  • 初看:result 不是字符串数组。但是有_id的东西。
  • Result 不是字符串数组,而是复杂对象数组。 JSON 与您尝试反序列化的对象不匹配。
  • @LasseVågsætherKarlsen - 考虑到错误指向“位置 12”,实际的 JSON 文本可能没问题。

标签: c# .net json data-conversion


【解决方案1】:

Visual Studio 可以为您做到这一点。获取干净的 JSON(没有所有那些 \"),将该 Json 放在剪贴板上,将光标放在 C# 文件中并选择

编辑、选择性粘贴、来自 JSon 的类

public class Rootobject
{
    public Result[] result { get; set; }
    public int resultCount { get; set; }
    public object pagedResultsCookie { get; set; }
    public string totalPagedResultsPolicy { get; set; }
    public int totalPagedResults { get; set; }
    public int remainingPagedResults { get; set; }
}

public class Result
{
    public string _id { get; set; }
    public string _rev { get; set; }
    public string[] ahaMemberGroup { get; set; }
}

按原样使用或稍微清理一下。将Rootobject 更改为您喜欢的任何内容。
请注意,您可能想要修复 pagedResultsCookie 的类型。

【讨论】:

  • 很好地将计数更改为 int。
  • 我没有那样做。这是直接来自 VS。
  • 我没有意识到您在评论时使用了选择性粘贴。根据 JSON 格式,它们确实应该是整数,所以它做出了正确的决定,IMO。 (如果您注意到,在 OP 中,类定义将它们作为字符串而不是它们。)
  • 是的,但它需要更多/更好的数据来确定 pagedResultsCookie 是什么。
  • 啊,你是对的。是的,考虑到它只有 null 可以使用,它做出了最好的选择。
猜你喜欢
  • 2020-01-15
  • 2019-12-31
  • 1970-01-01
  • 1970-01-01
  • 2020-11-26
  • 2018-07-25
  • 2015-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多