c# - 当它们不 "shaped"相同时,将 XML 反序列化为对象?

标签 c# xml serialization deserialization

我有一个像这样的 XML 片段:

<coverageCd>WEL
    <descriptorCd>SMIO
        <descriptorCdStartDate>01/01/2015</descriptorCdStartDate>
        <descriptorCdEndDate>12/31/9999</descriptorCdEndDate>
    </descriptorCd>
    <descriptorCd>AAE
        <descriptorCdStartDate>01/01/2015</descriptorCdStartDate>
        <descriptorCdEndDate>12/31/9999</descriptorCdEndDate>
    </descriptorCd>
</coverageCd>

我需要自动将其转换为以下类结构:

public class XmlCoverageCode
{
    public string CoverageCode { get; set; }
    public IEnumerable<XmlDescriptor> Descriptors { get; set; }
}

public class XmlDescriptor
{
    public string DescriptorCode { get; set; }
    public string DescriptorCodeStartDate { get; set; }
    public string DescriptorCodeEndDate { get; set; }
}

...所以上面的 XML 片段将转换为:

var coverageCd = new XmlCoverageCode
{
    CoverageCode = "WEL",
    Descriptors =
        new List<XmlDescriptor>
        {
            new XmlDescriptor
            {
                DescriptorCode = "SMIO",
                DescriptorCodeStartDate = "01/01/2015",
                DescriptorCodeEndDate = "12/31/9999"
            },
            new XmlDescriptor
            {
                DescriptorCode = "AAE",
                DescriptorCodeStartDate = "01/01/2015",
                DescriptorCodeEndDate = "12/31/9999"
            }
        }
};

当然,我更愿意使用内置机制来执行此操作。我只是不知道这是否可能。

最佳答案

要从 XML 中获取类,您只需将 XML 复制到剪贴板,然后在 Visual Studio 中进行“编辑”->“选择性粘贴”->“将 XML 作为类粘贴”即可。然后,清理生成的代码后,我们得到以下内容:

[XmlRoot(ElementName = "coverageCd")]
public partial class XmlCoverageCode
{
    [XmlText]
    public string CoverageCode { get; set; }

    [XmlElement("descriptorCd")]
    public List<XmlDescriptor> Descriptors { get; set; }
}

public partial class XmlDescriptor
{
    [XmlText]
    public string DescriptorCode { get; set; }

    [XmlElement("descriptorCdStartDate")]
    public string DescriptorCodeStartDate { get; set; }

    [XmlElement("descriptorCdEndDate")]
    public string DescriptorCodeEndDate { get; set; }
}

这实际上与您在问题中所写的相同,但具有所需的属性并将 IEnumerable 更改为 List,因为 XmlSerializer不支持第一个。

以及如何序列化/反序列化的代码片段:

var serializer = new XmlSerializer(typeof(XmlCoverageCode));
var coverageCode = (XmlCoverageCode)serializer.Deserialize(xmlFileStream);
serializer.Serialize(xmlFileStream, coverageCode);

关于c# - 当它们不 "shaped"相同时,将 XML 反序列化为对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626694/

相关文章:

jquery - 将 XML 数据发送到 MySQL 数据库

python - 在 openerp 中验证 arch 字段时, View 架构的 XML 无效

java - 是否可以使用多个 "root"元素将多个 Java 类对象序列化到单个 XML 文件中?

c# - 数据类型从int转换为string时发生错误

c# - 连接到现有的 Outlook 进程

c# - 绑定(bind)文本框

java - 在 RelativeLayout 中动态重新定位 View

postgresql - eclipselink + @convert(json) + postgres + 列表属性

java - @JsonIgnoreProperties 不允许通过@RequestBody 设置值?

c# Process.Modules 非常慢