You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义对象反序列化触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:43