c# - 反序列化 XML,如何访问属性?

标签 c# xml-serialization

我有一些正在使用和反序列化的 XML。

<Foo>
    <Bars Baz="9">
        <Bar>...</Bar>
        <Bar>...</Bar>
    </Bars>
</Foo>

目前我将它反序列化为这个类:

[XmlRoot("Foo")]
public class Foo
{
    public Foo() { }

    [XmlArrayItem("Bar")]
    public Bar[] Bars { get; set; }
}

这工作正常,只是我没有捕获 @Baz 的值。我想将 Baz 添加为 Foo 的属性,但我不确定如何添加。我应该在我的 Baz 属性上设置什么属性才能正确反序列化 xml?

[WhatAttributeGoesHere("?")]
public int Baz { get; set; }

最佳答案

通常:

[XmlAttribute]

(带有可选的名称、命名空间等)就是您所追求的。

但是,您不能直接在集合上使用它。相反,您需要为 Bars 提供一个包装类,其中包含属性和:

public class Foo {
    public BarWrapper Bars {get;set;}
}
public class BarWrapper {
    private readonly List<Bar> bars = new List<Bar>();
    [XmlElement("Bar")]
    public List<Bar> Items {get{return bars;}}

    [XmlAttribute]
    public int Baz {get;set;}
}
public class Bar {...}

关于c# - 反序列化 XML,如何访问属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6003847/

相关文章:

c# - 无法将简单的 XML 解析为对象?

c# - Xml序列化序列问题

c# - 如何使用 Task 设置最大并发线程数

c# - 如何在 C# 中用 '#' 拆分字符串

c# - 仅在服务器上查询 Active Directory 时出错

c# - 无法在 GetAwaiter().GetResult() 上将类型 'void' 隐式转换为 'object'

perl - XML::Dumper 在输出中使用错误的哈希引用

c# - Windows Phone silverlight 8.1 Http NotificationChannel ChannelUri 更新未被击中

sql - 如何使用 NHibernate 将 XML 类型列映射到强类型对象属性?

c# - 如何将 Enumerable.ToList<>() 反序列化为 List<>