【问题标题】:Generate C# class from XML file with mixed type of objects从具有混合类型对象的 XML 文件生成 C# 类
【发布时间】:2019-05-13 21:09:50
【问题描述】:

我有下面这样的课程

public abstract class MainDTO
{
   public string Id;
   public string CreatedBy;
}

public class SubDTO : MainDTO
{
   public string SubKey;
}

public class LockDTO : SubDTO
{
   public string LockKey;
}

我需要创建一个返回 List<MainDTO> 的函数。我的 xml 文件如下所示。

<MainDTOList>  
  <SubDTO>
    <Id>ABC</Id>
    <CreatedBy>XXX</CreatedBy>
    <SubKey>123045</SubKey>
  </SubDTO>
  <LockDTO>
    <Id>GERTE</Id>
    <CreatedBy>VGINA</CreatedBy>
    <SubKey>123045</SubKey>
    <LockKey>L123045</SubKey>
  </LockDTO>
</MainDTOList>

我使用 XmlSerializer 获得了读取 XML 文件并在所有对象都属于同一类型时返回对象集合的代码。但就我而言,它们是不同的。请告诉我怎么做。

【问题讨论】:

  • 几乎都一样...看看这个XmlSerializer的构造函数:XmlSerializer(Type, Type[])
  • 哪个序列化程序?
  • 如果我的 xml 文件只有所有 SubDTO,那么我将使用 XmlSerializer reader = new XmlSerializer(typeof(List), new XmlRootAttribute("MainDTOList"));但这里使用的是 SubDTO 和 LockDTO .. 所以我必须在 new XmlSerializer(typeof(List) 中使用

标签: c# xml xsd


【解决方案1】:

我能想到的可以实现上述的简单方法是看你的XML结构,有点没用过,所以请原谅我的小假设错误

这个想法是创建一个看起来像你的 XML 的类,如果值只出现一次,则使用一个看起来像这样的类(作为示例)

[XmlRoot("MainDTOList")]
public class SomeClass
{
    [XmlElement("SubDTO")]
    public SubDTO SubDTO{get;set;}

    [XmlElement("SubDTO")]
    public LockDTO LockDTO{get;set;}

    ....

}

然后做一个简单的XmlSerializer. Deserialize 反序列化您的特定 XML

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    相关资源
    最近更新 更多