【问题标题】:Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content:Newtonsoft.Json.JsonReaderException:阅读完 JSON 内容后遇到的附加文本:
【发布时间】:2016-02-21 06:47:42
【问题描述】:

我在从服务器接收 JSON 数组时遇到一个奇怪的问题,我试图反序列化它,但它说

我创建了一个类并试图将其反序列化为该对象,但是它说

类如下。

class bundle
{
    public string msgid { get; set; }
    public string messagetype { get; set; }
    public string message { get; set; }
    public string from { get; set; }

}

异常:Newtonsoft.Json.JsonReaderException:完成读取 JSON 内容后遇到的附加文本:y。路径'',第 1 行, 位置 93. 在 Newtonsoft.Json.JsonTextReader.Read() 在 Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader 阅读器,类型 objectType,布尔值 checkAdditionalContent)在 Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader 阅读器, 类型 objectType) 在 Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader 阅读器,类型 objectType) 在 Newtonsoft.Json.JsonConvert.DeserializeObject(String 值,类型类型,JsonSerializerSettings 设置)在 Newtonsoft.Json.JsonConvert.DeserializeObject(字符串值)在 Listener.Program.LogStatus(布尔接收,字节[]缓冲区,Int32 length) in at Listener.Program.d__5.MoveNext() in --- End 来自先前抛出异常的位置的堆栈跟踪 ---
在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 Listener.Program.d__1.MoveNext()

我得到的数组在下面,

{"messagetype":"chatmsg","msgid":"123_119","from":"sam","message":"Hi there, good morning ! "}                                                                                                                            
{"messagetype":"chatmsg","msgid":"123_120","from":"sam","message":"how are you?"}                                                                                                                            

{"messagetype":"chatmsg","msgid":"6478316959_121","from":"sam","message":"this is msg"} ood morning !"}                                                                                                                            
{"messagetype":"ping"}g","msgid":"6478316959_121","from":"sam","message":"you are crazy"} orning ! "}

最后是意外的令牌。

【问题讨论】:

  • 那个 JSON 是无效的,它有多个根元素。尝试将其粘贴到jsonformatter.curiousconcept.com 中,您将看到问题所在。要读取 JSON 根元素序列,请参阅stackoverflow.com/questions/26601594/…
  • 我知道它最后有意外的令牌,但是当我尝试反序列化它时,它不起作用:(
  • 实际上,现在我查看了您的 JSON,我意识到它不仅仅是根对象的流还有更多的问题。对于这一行:{"messagetype":"chatmsg","msgid":"6478316959_121","from":"sam","message":"this is msg"} ood morning !"},似乎有人试图覆盖文件中的一行,但未能完全覆盖它。你确定你的 JSON 真的那么糟糕吗?
  • 是的,我正试图弄清楚如何将其反序列化为类对象,但它不断向我抛出相同的异常

标签: c# arrays json c#-4.0 json.net


【解决方案1】:

经过大量的工作,我想出了这个:

string final = string.Empty;
string name = encoder.GetString(buffer);
char []arr = name.ToArray();

boolean bln = true;
foreach (char item in arr)
{
    if (bln)
    {
        if (item == '}')
        {
            final += item.ToString();
            break;
        }
        else
        {
            final += item.ToString();
        }
    }
}

Console.WriteLine(final);

这将截断其余的字符。

【讨论】:

    【解决方案2】:

    所有的数组项键必须以相同的名称放置在您的 finally 类中,将您的类更改为此并再次测试:

    class bundle
    {
        public string msgid { get; set; }
        public string messagetype { get; set; }
        public string message { get; set; }
        public string from { get; set; }
    
    }
    

    您还可以通过以下工具转换您的 JSON 数组:JSON2Csharp

    【讨论】:

    • 试过了,还是不行,错误依旧:(
    • 你用JsonConvert.DeserializeObject<bundle>(JsonStr);解析它吗?如果您的数组包含 4 个项目,请将其更改为 JsonConvert.DeserializeObject<List<bundle>>(JsonStr); 并使您的数组为有效的 JSON 数组 => var allItems = [{},{}];
    • 这是他试图反序列化的对象,而不是数组。他只需要去掉不属于那里的多余垃圾。
    【解决方案3】:

    我认为您的 Json 无效,因为您有多个根元素,您需要反序列化为 List<bundle>

    {"messagetype":"chatmsg","msgid":"123_119","from":"sam","message":"Hi there, good morning ! "}                                                                                                                            
    {"messagetype":"chatmsg","msgid":"123_120","from":"sam","message":"how are you?"}                                                                                                                            
    
    {"messagetype":"chatmsg","msgid":"6478316959_121","from":"sam","message":"this is msg. Good morning !"}                                                                                                                            
    {"messagetype":"ping","msgid":"6478316959_121","from":"sam","message":"you are crazy morning ! "}
    

    【讨论】:

    • 试过了,当我收到 JSON 数组时,它会附加来自第一个数组的第一条消息,最后像这样。 {"messagetype":"chatmsg","msgid":"6478316959_121","from":"sam","message":"this is msg"} 早上好!"}
    【解决方案4】:

    我正在使用 Newtonsoft;在我的示例中,在我用这些 { } 包围我的整个 JSON 之后,序列化就起作用了。

    希望这对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 1970-01-01
      • 2013-06-16
      • 1970-01-01
      相关资源
      最近更新 更多