Json.NET 问题

Posted

技术标签:

【中文标题】Json.NET 问题【英文标题】:Json.NET issues 【发布时间】:2015-07-08 15:49:13 【问题描述】:

我正在尝试用 C# 序列化一个简单的对象,发送它,然后在另一端反序列化它。前两部分似乎工作正常,但是当我尝试这样做时:

ReturnItem jsonval = JsonConvert.DeserializeObject<ReturnItem>(result);

我明白了:

07-08 11:41:15.519 I/MonoDroid(2856):Newtonsoft.Json.JsonSerializationException:转换值““Val1”:-1.0,“Val2”:-1.0,“Val3”:-1.0时出错, "Val4":-1.0" 输入 'androidDemo.ReturnItem'。路径“”,第 1 行,位置 104。---> System.ArgumentException:无法从 System.String 转换或转换为 AndroidDemo.ReturnItem。

作为参考,ReturnItem 看起来像:

public class ReturnItem

    public double Val1 get; set; 
    public double Val2 get; set; 
    public double Val3 get; set; 
    public double Val4 get; set; 

result 是一个字符串,如下所示:

"\"Val1\":-1.0,\"Val2\":-1.0,\"Val3\":-1.0,\"Val4\":-1.0"

编辑:这是我最初序列化 ReturnItem 的方式。

ReturnItem value = new ReturnItem();
value.Val1= -1;
value.Val2= -1;
value.Val3= -1;
value.Val4= -1;
return JsonConvert.SerializeObject(value);

【问题讨论】:

是否有List&lt;object&gt; 涉及任何地方? 我自己使用最新版本的 Json.NET 测试了这段代码,它运行没有问题。 你是怎么序列化的? 是否有可能在不同的命名空间中有多个“ReturnItem”类? 您要传输它的介质是什么?以及如何? 【参考方案1】:

您要反序列化的字符串中是否存在围绕 JSON 对象的双引号?

如果是这样,那么它会认为整个事情是字符串的 JSON 表示,而不是“ReturnItem”。

【讨论】:

你搞定了,我切断了前导和尾随引号并删除了所有反斜杠,这就解决了! 很奇怪,我尝试将该字符串通过 JsonConvert 放入我自己的测试应用程序中,它抱怨 JSON 无效,所以我认为我可能错了。读入 JSON 字符串的方式肯定有所不同,或者反序列化代码在不同平台上有所不同。无论如何,我很高兴你修好了它。【参考方案2】:

确保 AndroidDemo.ReturnItem 类与上面示例中的 ReturnItem 类相同。

【讨论】:

它们是相同的;从字面上复制粘贴。

以上是关于Json.NET 问题的主要内容,如果未能解决你的问题,请参考以下文章

json.net 到 System.text.json 对 .net 5 中嵌套类的期望

如何使用 JSON.NET 通过 ASP.NET MVC 传递 JSON 日期值? [复制]

.NET 中的 LINQ to JSON

Json.NET 不再有超过120个依赖项

Json.NET 与 Newtonsoft.Json SerializationBinder 不同

Json.NET XML 转换和 TypeNameHandling.Arrays