【问题标题】:Attributes vs. Elements in the DataContractSerializerDataContractSerializer 中的属性与元素
【发布时间】:2011-01-30 21:10:35
【问题描述】:

我需要实现这样的结构:

员工:

  • 身份证
  • 名字
  • 姓氏
  • 电子邮件
  • 出生日期
  • 客户
    • 身份证
    • 姓名
    • 地址
    • 电话
    • 电子邮件
    • 超过 1000 名员工
  • 业务
    • 身份证
    • 姓名
    • 说明

每个员工可能有多个客户,所有数据都应使用 xml 序列化存储/加载到/从 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 时,在反序列化时,不同员工的相同对象(客户)存在不匹配(有一些具有相同字段的不同对象)。

我可以尝试什么?

【问题讨论】:

  • 您可以尝试询问有关 XML 序列化程序问题的问题。我们或许可以为您提供帮助。

标签: c# xml-serialization


【解决方案1】:

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

数据就是数据,但我想知道这是否是因为您期望一个完整的“图形”反序列化(保留对象引用)。 XmlSerializer 是一个“树”序列化器,因此同一个对象是否被序列化 6 次无关紧要 - 它会反序列化为 6 个不同的对象。没有什么特别/独特的东西可以识别它们。您唯一的选择是事后手动修复它们,方法是检查重复项并将它们替换为单个常见实例。

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

一个

    • C
  • D
    • C

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

一个

    • C
  • D
    • E

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

【讨论】:

  • 感谢您的回答!你正确地理解了我的问题。我想知道,我能否找到在序列化时创建属性并在反序列化时识别对象的东西?附言不要注意 ID - 它只是对象的字段,仅此而已。
  • @Turach - 在 general 的情况下有 IObjectReference,但是 AFAIK XmlSerializer 不支持这一点(许多其他人支持,但在 xml 方面并不丰富)。对于这样的 DCS 示例:see here
猜你喜欢
  • 2014-06-19
  • 1970-01-01
  • 2017-01-12
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多