我有一个类,除其他属性外,还具有 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/