Newtonsoft.Json.JsonReaderException:完成读取JSON内容后遇到的其他文本:

时间:2016-02-21 06:47:42

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

我在从服务器接收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()at   Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader   reader,Type objectType,Boolean checkAdditionalContent)at   Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader阅读器,   输入objectType)at   Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader,Type   objectType)at Newtonsoft.Json.JsonConvert.DeserializeObject(String   值,类型类型,JsonSerializerSettings设置)at   Newtonsoft.Json.JsonConvert.DeserializeObject(String value)at   Listener.Program.LogStatus(布尔接收,字节[]缓冲区,Int32   在Listener.Program.d__5.MoveNext()中的---结束   从抛出异常的先前位置开始的堆栈跟踪---
  在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 ! "}

最后是意外的令牌。

4 个答案:

答案 0 :(得分: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);

将截断其余字符。

答案 1 :(得分:1)

我正在使用Newtonsoft;在我的示例中,序列化在我用这些{ }

包围了整个JSON之后才起作用

希望这对某人有帮助。

答案 2 :(得分:0)

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

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

}

elso你可以通过以下工具转换你的JSON数组:JSON2Csharp

答案 3 :(得分:0)

我认为你的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 ! "}