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

基于Monaco Editor的C#动态编译JSON反序列化报错求助

解决动态编译C#代码中System.Text.Json反序列化“JSON值无法转换”异常
  • 核心问题根源:你注释掉System.Text.Json.Serialization.dll是导致异常的关键原因。System.Text.Json的核心序列化/反序列化逻辑(包括属性映射、复杂类型处理、特性识别等)高度依赖该程序集,缺失它会让Json序列化器无法正确解析自定义对象的结构。

  • 具体解决步骤:

    1. 恢复引入System.Text.Json.Serialization.dll
      在构建CSharpCompilation时,必须将该程序集添加到引用集合中,与System.Text.Json.dll一同引入。确保两个dll的本地路径正确,且被编译过程正确加载。
    2. 确保代码中正确使用Json序列化特性
      如果你的自定义对象需要自定义属性名称、忽略某些属性等,必须在对象属性上标记[JsonPropertyName]、[JsonIgnore]等特性——这些特性都属于System.Text.Json.Serialization命名空间,缺失对应dll时这些特性无法被识别,会导致序列化器无法匹配JSON字段与对象属性,进而抛出转换异常。
    3. 验证程序集版本一致性
      确认System.Text.Json.dll和System.Text.Json.Serialization.dll的版本完全一致,版本不匹配会导致序列化逻辑内部调用出错,同样可能引发转换异常。
    4. 检查动态编译程序集的正确性
      编译完成后,可以临时将生成的程序集保存到本地,用反编译工具查看:
      • 自定义对象的定义是否正确生成
      • 程序集是否正确引用了System.Text.Json和System.Text.Json.Serialization
    5. 捕获详细异常信息定位问题
      不要只捕获顶层异常,要获取InnerException的具体内容,明确是哪个字段、哪种类型无法转换。比如Nullable类型、枚举类型、嵌套对象的转换问题,可能需要额外配置JsonSerializerOptions(如设置PropertyNameCaseInsensitive = true)或添加对应特性标记。

内容的提问来源于stack exchange,提问作者Shankar Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 22:32:12