DataContractSerializer中的属性与元素

时间:2011-01-30 21:10:35

标签: c# xml-serialization

我需要实现这样的结构:

Emplooyee:

  • ID
  • 名字
  • 姓氏
  • 电子邮件
  • 出生日期
  • 客户
    • ID
    • 名称
    • 地址
    • 电话
    • 电子邮件
    • 超过1000名员工
  • 商业
    • ID
    • 名称
    • 描述

每个员工可能有多个客户,所有数据都应使用xml-serialization存储/加载到xml文件中,业务字段应作为属性存储在xml中。

public class AllEntities
{
    public AllEntities()
    {
        Create();        
    }

    public List<Employee> allEmployees { get; set; }

    public List<Customer> allCustomers { get; set; }

    public List<Business> allBusiness { get; set; }

    private void Create()
    {
        allCustomers = new List<Customer> { new Customer ("Company1", "Minsk", "1236547", "trata@tut.by", false), 
                                            new Customer("Company2", "Minsk", "7896589", "itr@tut.by", false)};
        allBusiness = new List<Business> { new Business("Programming", "Short description"),
                                           new Business("Desin", "Short description")};

        allEmployees = new List<Employee> { new Employee("Alex", "Malash", "mal@tut.by", new DateTime(1990, 5, 9), allCustomers, allBusiness[0]),
                                            new Employee("Ira", "Vashnko", "ira@tut.by", new DateTime(1990, 9, 1), new List<Customer> { allCustomers[0] }, allBusiness[1]),
                                            new Employee("Igor", "Loshara", "igor@tut.by", new DateTime(1990, 1, 8), allCustomers, allBusiness[0])};
    }
}

当我使用DataContractSerializer时,我无法创建属性,当我使用XmlSerializer时,在反序列化时,不同员工中的相同对象(Customer)存在不匹配(有一些具有相同fild的不同对象)。

我可以尝试什么?

1 个答案:

答案 0 :(得分:2)

DataContractSerializer不做属性,所以忘了。你真的想要XmlSerializer。我很不清楚你用ids描述了什么问题。如果它不正确地反序列化,我会非常惊讶。如果您认为是这种情况,也许发布一个可重复的示例,但听起来就像您只是拥有您不期望的数据。

数据是数据,但我想知道这是因为你期望完整的“图形”反序列化(保留对象引用)。 XmlSerializer是一个“树”序列化器,所以如果相同的对象被序列化6次并不重要 - 它将反序列化为6个不同的对象。没有任何特殊/独特的东西可以识别它们。您唯一的选择是通过检查重复项并将其替换为单个公共实例来手动修复它们。

把它放在图片中;如果你序列化树

A

    • C
  • d
    • C

(B和D下的相同实例)它将反序列化为:

A

    • C
  • d
    • 电子

但简单地说C和E将是具有相同值的不同对象。