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

XmlSerializer报Compiling JScript/CSharp scripts is not supported错误如何解决

问题解决思路
  • 确认SistemEcuatii类的访问修饰符为public,Rational类同样需要设置为public且包含无参数公共构造函数,所有参与序列化的属性/字段均为公共可读写状态。
  • 调整XmlSerializer实例的初始化时机:不要在类的字段声明阶段直接初始化,改为静态懒加载模式,避免静态构造阶段触发动态编译异常,同时补充using语法自动释放IO资源避免文件句柄泄漏,修改后的代码如下:
class SistemEcuatiiModel
{
    string baza;
    // 改为静态只读字段,全局仅初始化一次
    private static readonly XmlSerializer serializer = new XmlSerializer(typeof(SistemEcuatii));
    SistemEcuatii data;
    public void WriteTo()
    {
        using (TextWriter writer = new StreamWriter(baza))
        {
            serializer.Serialize(writer, data);
        }
    }
    void LoadFromFile()
    {
        using (StreamReader streamer = new StreamReader(baza))
        {
            SistemEcuatii dt = (SistemEcuatii)serializer.Deserialize(streamer);
            data = dt;
        }
    }
}
  • 给交错数组属性添加明确的序列化特性,避免XmlSerializer自动推断类型出错:
[XmlIgnore]
public Rational[,] tab;

[XmlArray]
public Rational[][] Data
{
    get 
    {
        Rational[][] dt = new Rational[tab.GetLength(0)][];
        for (int i = 0; i < tab.GetLength(0); i++)
        {
            dt[i] = new Rational[tab.GetLength(1)];
            for (int j = 0; j < tab.GetLength(1); j++)
                dt[i][j] = tab[i, j];
        }
        return dt;
    }
    set
    {
        tab = new Rational[value.Length, value[0].Length];
        for (int i = 0; i < tab.GetLength(0); i++)
            for (int j = 0; j < tab.GetLength(1); j++)
                tab[i, j] = value[i][j];
    }
}
  • 如果你使用的是.NET Core 3.1+、.NET 5+版本,且启用了发布裁剪、AOT编译配置,需要在项目文件(.csproj)中添加配置预先生成序列化程序集,避免运行时动态编译触发平台不支持异常:
<PropertyGroup>
  <GenerateSerializationAssemblies>On</GenerateSerializationAssemblies>
</PropertyGroup>
  • 排查验证:可临时将Data属性的类型替换为int[][]测试序列化是否正常,排除Rational自定义类型的序列化逻辑兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:05