首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >序列化自定义集合时出现异常

序列化自定义集合时出现异常
EN

Stack Overflow用户
提问于 2017-06-20 21:49:45
回答 1查看 27关注 0票数 0

下面是我试图序列化的类。

我在序列化过程中得到了异常,它在从xml反序列化时起作用。

代码语言:javascript
运行
复制
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
public class Organization
{
    private string _name;

    public string Name
    {
        get
        {
            return _name;
        }
        set
        {
            _name = value;
        }
    }

    private HasParentObservableCollection<Employee> _emp;

    [System.Xml.Serialization.XmlElementAttribute("Employee")]
    public HasParentObservableCollection<Employee> Emp
    {
        get
        {
            return _emp;
        }
        set
        {
            _emp = value;
        }
    }

    public Organization(string name, HasParentObservableCollection<Employee> emp)
    {
        Emp = emp;
        Name = name;
    }
}

在序列化方法调用期间,我收到异常消息- There was an error generating the XML document.

我在HasParentObservableCollection类上标记了Serializable属性

代码语言:javascript
运行
复制
[Serializable]
public class HasParentObservableCollection<T> : ObservableCollection<T>
{
    protected override void InsertItem(int index, T item)
    {
        //set the parent object when a new item is added to our collection
        if (item != null && item is IHasParent)
            (item as IHasParent).Parent = this;

        base.InsertItem(index, item);
    }
}

以下是序列化代码

代码语言:javascript
运行
复制
 Organization org1 = new Organization("org11", new HasParentObservableCollection<Employee>() { new Employee("AA", "AA"), new Employee("AA", "AA") });
 Organization org2 = new Organization("org22", new HasParentObservableCollection<Employee>() { new Employee("BB", "BB"), new Employee("AA", "AA") });
 ObservableCollection<Organization>() Org = new ObservableCollection<Organization>() { org1, org2};


XmlSerializer serializer = new XmlSerializer(typeof(Organization));
StringWriter sw = new StringWriter();
XmlTextWriter tw = new XmlTextWriter(sw);
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(tw, Org, ns);
EN

Stack Overflow用户

发布于 2017-06-20 23:03:07

这里有几个问题:

1)被XmlSerializer序列化的类必须有公共的无参数构造函数:

代码语言:javascript
运行
复制
public class Organization { public Organization() {} ... }
public class Employee { public Employee() {} ... }

2)您没有序列化为其创建XmlSerializer实例的类型

代码语言:javascript
运行
复制
var serializer = new XmlSerializer(typeof(ObservableCollection<Organization>));

3)您可以删除[Serializable]标记-这在xml序列化中会被忽略

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44654968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档