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<object>
涉及任何地方?
我自己使用最新版本的 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 日期值? [复制]