c# - XmlArray 序列化 - 如何使序列化程序忽略列表中项目的类名?

标签 c# xml serialization classname

我有一个类,除其他属性外,还具有 MyObject 列表。

public class MyClass
{
    ...

    [XmlArray("OBJECT")]
    public List<MyObject> Objects { get; set; }

    ...
}

每个 MyObject 有两个属性:PropA 和 PropB。

public class MyObject
{
    public string PropA {get;set;}
    public string PropB {get;set;}
}

XML 序列化程序返回此 XML:

<OBJECT>
    <MyObject>
        <PropA>A1</PropA>
        <PropB>B1</PropB>
    </MyObject>
    <MyObject>
        <PropA>A2</PropA>
        <PropB>B2</PropB>
    </MyObject>
    <MyObject>
        <PropA>A3</PropA>
        <PropB>B3</PropB>
    </MyObject>
</OBJECT>

我给定的要求是它看起来像这样(我发誓,考虑到真实的对象名称和属性值,它看起来不会那么错误,但无论如何,这是我的任务):

<OBJECT>
    <PropA>A1</PropA>
    <PropB>B1</PropB>
    <PropA>A2</PropA>
    <PropB>B2</PropB>
    <PropA>A3</PropA>
    <PropB>B3</PropB>
</OBJECT>

实现这一目标的最佳方法是什么?我尝试摆弄各种 Xml 属性(例如 XmlArrayItem、XmlElement),但我似乎无法摆脱类名包装器。

我考虑过自定义 xml 序列化,但我讨厌放弃其他属性上发生的所有(工作)默认 Xml 序列化,每个属性上只有一个 XmlElement 属性。

有什么想法吗?

谢谢。

编辑:如果您指的是 xDaevax 善意发布的链接,则这不是重复的。 (XML Serialization - Disable rendering root element of array)。这个问题/答案并不是询问/解决如何删除项目类名称(列表中每个项目周围的标签),而是显示如何删除包含整个项目列表的整体列表标签。我想要的恰恰相反。如果有另一个类似的已回答问题的链接,我很想知道。谢谢。

最佳答案

如果您有 MyObject 集合,则可以使用 LINQ to XML 轻松完成此操作。 :

var xDoc = new XDocument("OBJECT",
        myObjects
        .SelectMany(x => new[]
        {
            new XElement("PropA", x.PropA),
            new XElement("PropB", x.PropB)
        }));

xDoc.Save("path")

关于c# - XmlArray 序列化 - 如何使序列化程序忽略列表中项目的类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23919151/

相关文章:

c# - 自定义用户控件 TextBlock.text 绑定(bind)

Java XML 解析器无需过多内存分配

python - 如何使用python获取具有默认命名空间的xml文件中所有元素的xpath?

django - 嵌套序列化程序 django rest 框架中的上下文

c# - 即使 ReadOnly 设置为 false,ASP.NET GridView 中的 CheckBoxField 列也会被禁用

c# - 为什么当integer.equals(string)包含相同的值但不抛出类型不匹配异常时,它们给出false?

python - 如何创建 "serialized"版本的模型?

serialization - 将氧化钠的公钥序列化为 JSON

c# - 一行中的两个布局

java - 将 xpath 表达式结果转换为 json