zoukankan      html  css  js  c++  java
  • .NET Framework 4.0 XmlSerializer and automatic collection properties

    System.Xml.Serialization.XmlSerializer反序列化类型包含集合自动属性运行在.NET Framework 4.0下则会抛出如下异常信息:

    System.InvalidOperationException: Unable to generate a temporary class (result=1).
    
    error CS0200: Property or indexer 'SomeClass.CollectionProperty' cannot be assigned to — it is read only.

    出于对集合属性Classes的set保护,它有一个private setter。类型定义如下:

    [XmlRoot(ElementName = "container")]
    public sealed class MyContainer
    {
        public MyContainer()
        {
            this.Classes = new List<MyClass>();
        }
    
        [XmlArray(ElementName = "classes", IsNullable = true)]
        [XmlArrayItem(ElementName = "class", Type = typeof(MyClass))]
        public List<MyClass> Classes { get; private set; }
    }
    
    public sealed class MyClass
    {
        [XmlAttribute(AttributeName = "value")]
        public Int32 Value { get; set; }
    }

    以上问题在.NET Framework 3.0也曾出现,微软在.NET Framework 3.5修复了它,但到了.NET Framework 4.0问题重现,如果你已安装了.NET Framework 4.5则不会遇到该问题。解决方法和之前一样将自动属性修改为显式的get、set。

    [XmlRoot(ElementName = "container")]
    public sealed class MyContainer
    {
        private List<MyClass> _classes;
    
        public MyContainer()
        {
            _classes = new List<MyClass>();
        }
    
        [XmlArray(ElementName = "classes", IsNullable = true)]
        [XmlArrayItem(ElementName = "class", Type = typeof(MyClass))]
        public List<MyClass> Classes 
        {
            get 
            {
                return _classes;
            }
        }
    }
  • 相关阅读:
    Matplotlib学习
    Docker win10安装
    pandas读取文件报错
    python特殊函数__str__、__repr__和__len__
    tar命令总结
    lamp服务器站点目录被植入广告代码处理
    linux简单测试
    中国剩余定理
    牛客暑期第六场G /// 树形DP 最大流最小割定理
    逆元 组合A(n,m) C(n,m)递推 隔板法
  • 原文地址:https://www.cnblogs.com/junchu25/p/2818873.html
Copyright © 2011-2022 走看看