Newtonsoft.Json 反序列化的对象中含有自定义类型的属性 会报错

djshichaoren 2018-04-10 09:10:01

[JsonObject(MemberSerialization.OptOut)]
class FromPythonObject
{
[JsonProperty("has_caption")]
public bool _HasCatpion;

[JsonProperty("word_area_list")]
public List<Word> _WordList;
}

[JsonObject(MemberSerialization.OptOut)]
public class Word
{
[JsonProperty("upper_border")]
public int _UpperBorder;

[JsonProperty("bottom_border")]
public int _BottomBorder;

[JsonProperty("right_border")]
public int _RightBorder;

[JsonProperty("left_border")]
public int _LeftBorder;

[JsonProperty("content")]
public string _Content;

}


FromPythonObject中含有属性List<**Word**>
反序列化:

FromPythonObject word_list = JsonConvert.DeserializeObject<FromPythonObject>(jsonString);


报错:Error converting value "{"right_border": 502, "left_border": 455, "upper_border": 9, "bottom_border": 31, "content": "and"}" to type 'RecognitionModule.Model.Word'. Path 'word_area_list[0]', line 1, position 154.

将"{"right_border": 502, "left_border": 455, "upper_border": 9, "bottom_border": 31, "content": "and"}" 直接反序列化Word对象没有报错
Word word = JsonConvert.DeserializeObject<Word>("{\"right_border\": 502, \"content\": \"and\", \"upper_border\": 9, \"left_border\": 455, \"bottom_border\": 31}");


请问为什么序列化FromPythonObject对象会报错呢?
...全文
502 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
djshichaoren 2018-04-10
  • 打赏
  • 举报
回复
引用 9 楼 xuzuning 的回复:
"{\"word_area_list\": [\"这个引号是做什么用的? 难道 word_area_list 就是一个只有一个元素的字符串? \\\" 又是什么呢?
它报的错是 Error converting value "{"right_border": 502, "left_border": 455, "upper_border": 9, "bottom_border": 31, "content": "and"}" to type 'RecognitionModule.Model.Word'. Path 'word_area_list[0]', line 1, position 154. 我以为它已经把[""]解析出来了呢
xuzuning 2018-04-10
  • 打赏
  • 举报
回复
"{\"word_area_list\": [\"这个引号是做什么用的? 难道 word_area_list 就是一个只有一个元素的字符串? \\\" 又是什么呢?
djshichaoren 2018-04-10
  • 打赏
  • 举报
回复
引用 7 楼 sp1234 的回复:
[" ..... "] 这2个双引号无法解析。
多谢! 我把[" ..... "] 中的双引号去掉以后,又把\\\"改为\"就可以了。 这个是python序列化的字符串, 在python中,我先json序列化了里面的List<Word>为List<string>,然后再序列化外层的FromPythonObject对象,然后就出的这个问题 再次感谢
  • 打赏
  • 举报
回复
[" ..... "] 这2个双引号无法解析。
djshichaoren 2018-04-10
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
[quote=引用 4 楼 djshichaoren 的回复:] [quote=引用 2 楼 sp1234 的回复:] JsonConvert.DeserializeObject<Word>(jsonString)
我要反序列化FromPythonObject,List<Word>只是它的一个属性啊 [/quote] 你的 jsonString 根本不配套啊?![/quote] 我的json string是 "{\"word_area_list\": [\"{\\\"left_border\\\": 455, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"and\\\", \\\"right_border\\\": 502}\", \"{\\\"left_border\\\": 516, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"make\\\", \\\"right_border\\\": 585}\", \"{\\\"left_border\\\": 597, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"the\\\", \\\"right_border\\\": 638}\", \"{\\\"left_border\\\": 651, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"land\\\", \\\"right_border\\\": 704}\", \"{\\\"left_border\\\": 718, \\\"upper_border\\\": 8, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"infertile\\\", \\\"right_border\\\": 817}\"], \"has_caption\": true}" 啊
  • 打赏
  • 举报
回复
引用 4 楼 djshichaoren 的回复:
[quote=引用 2 楼 sp1234 的回复:] JsonConvert.DeserializeObject<Word>(jsonString)
我要反序列化FromPythonObject,List<Word>只是它的一个属性啊 [/quote] 你的 jsonString 根本不配套啊?!
djshichaoren 2018-04-10
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
JsonConvert.DeserializeObject<Word>(jsonString)
我要反序列化FromPythonObject,List<Word>只是它的一个属性啊
djshichaoren 2018-04-10
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
json 中没有 FromPythonObject._WordList 对应的成员 你并没有声明他是可缺省的
json字符串中有对应的成员啊 json字符串是 "{\"word_area_list\": [\"{\\\"left_border\\\": 455, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"and\\\", \\\"right_border\\\": 502}\", \"{\\\"left_border\\\": 516, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"make\\\", \\\"right_border\\\": 585}\", \"{\\\"left_border\\\": 597, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"the\\\", \\\"right_border\\\": 638}\", \"{\\\"left_border\\\": 651, \\\"upper_border\\\": 9, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"land\\\", \\\"right_border\\\": 704}\", \"{\\\"left_border\\\": 718, \\\"upper_border\\\": 8, \\\"bottom_border\\\": 31, \\\"content\\\": \\\"infertile\\\", \\\"right_border\\\": 817}\"], \"has_caption\": true}"
  • 打赏
  • 举报
回复
JsonConvert.DeserializeObject<Word>(jsonString)
xuzuning 2018-04-10
  • 打赏
  • 举报
回复
json 中没有 FromPythonObject._WordList 对应的成员 你并没有声明他是可缺省的

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧