自定义对象反序列化触发ArgumentException问题求助
解决自定义对象反序列化触发ArgumentException的问题
嘿,从你贴的代码来看,反序列化时炸出ArgumentException大概率是踩了这几个常见的坑,我帮你逐一梳理修复方案:
1. Mtrline类缺了无参构造函数
不管用的是Json.NET、BinaryFormatter还是其他序列化框架,反序列化时都需要目标类有公共无参构造函数,但你的Mtrline现在只有一个带Findoc参数的构造函数:
public Mtrline(Findoc findoc) { }
框架没法凭空创建Mtrline实例,自然就抛参数异常了。
修复方法:给Mtrline补个无参构造函数:
public Mtrline() { } // 新增无参构造 public Mtrline(Findoc findoc) { }
2. 属性拼写错误导致映射失败
在Findoc类里发现了好几处属性名拼写错误,比如私有字段是_COMMENTS,但公共属性写成了COMMEMTS(少了个N):
private string _COMMENTS = ""; public string COMMEMTS { get { return this._COMMENTS; } set { _COMMENTS = value; } }
同样的错误还有COMMEMTS1、COMMEMTS2,序列化时存的是COMMENTS,反序列化时找COMMEMTS找不到,直接就报错了。
修复方法:把属性名改对,和私有字段对应上:
private string _COMMENTS = ""; public string COMMENTS { get { return this._COMMENTS; } set { _COMMENTS = value; } } private string _COMMENTS1 = ""; public string COMMENTS1 { get { return this._COMMENTS1; } set { _COMMENTS1 = value; } } private string _COMMENTS2 = ""; public string COMMENTS2 { get { return this._COMMENTS2; } set { _COMMENTS2 = value; } }
3. 未完成的代码藏着语法错误
你贴的Mtrline代码末尾被截断了:
private int _NEWLINE; public int NEWLINE { get { retur
这部分代码连return都没写完,编译都通不过,更别说反序列化了。赶紧补全属性的get/set方法:
private int _NEWLINE; public int NEWLINE { get { return this._NEWLINE; } set { _NEWLINE = value; } }
额外排查点
如果修完上面这些还不行,建议你:
- 检查所有嵌套类(
Truck、Routing、WhouseObj这些)是不是也都有公共无参构造函数,属性名有没有拼写错; - 确认序列化和反序列化用的是同一个框架,别序列化用Json.NET,反序列化又换别的库;
- 把异常的详细信息(
ArgumentException.Message)打出来看,里面一般会明确说哪个字段/类型出问题,定位起来更快。
内容的提问来源于stack exchange,提问作者user3102153
相关产品推荐
相关产品推荐

