提问人:Eldad Mor 提问时间:9/6/2010 更新时间:12/4/2013 访问量:5799
删除 C# XML 序列化中的数组名称
Getting rid of an array name in C# XML Serialization
问:
我试图在序列化XML时得到这个结果:
<Root Name="blah">
<SomeKey>Eldad</SomeKey>
<Element>1</Element>
<Element>2</Element>
<Element>3</Element>
<Element>4</Element>
</root>
或者换句话说 - 我正在尝试在“root”元素中包含一个数组,以及其他键。
这是我粗略的尝试:
[XmlRootAttribute(ElementName="Root", IsNullable=false)]
public class RootNode
{
[XmlAttribute("Name")]
public string Name { get; set; }
public string SomeKey { get; set; }
[XmlArrayItem("Element")]
public List<int> Elements { get; set; }
}
还有我的连载:
string result;
XmlSerializer serializer = new XmlSerializer(root.GetType());
StringBuilder sb = new StringBuilder();
using (StringWriter sw = new StringWriter(sb))
{
serializer.Serialize(sw, root);
result = sw.ToString();
}
但是,这是我的结果(为清楚起见,删除了命名空间):
<Root>
<SomeKey>Eldad</SomeKey>
<Elements>
<Element>1</Element>
<Element>2</Element>
<Element>3</Element>
</Elements>
</Root>
有什么方法可以删除“元素”部分吗?
答:
18赞
Chris Taylor
9/6/2010
#1
在 Array 上使用 XmlElement 属性,这将指示序列化程序将数组项序列化为当前元素的子元素,而不是为数组创建新的根元素。
[XmlRootAttribute(ElementName="Root", IsNullable=false)]
public class RootNode
{
[XmlAttribute("Name")]
public string Name { get; set; }
public string SomeKey { get; set; }
[XmlElement("Element")]
public List<int> Elements { get; set; }
}
评论
0赞
Nolmë Informatique
11/6/2015
使用字典,这不起作用,因为我们需要手动浏览项目。:(
-1赞
Simon White
12/4/2013
#2
感谢克里斯·泰勒(Chris Taylor)也为我的问题提供了答案。使用 asmx Web 服务,我得到以下 XML:
<Manufacturers>
<Manufacturer>
<string>Bosch</string>
<string>Siemens</string>
</Manufacturer>
</Manufacturers>
我想直接在元素中获取制造商名称,像这样删除元素:
<Manufacturers>
<Manufacturer>Bosch</Manufacturer>
<Manufacturer>Siemens</Manufacturer>
</Manufacturers>
对于其他有相同问题的人,我实现此目的的代码(VB.Net)是:
<WebMethod()> _
Public Function GetManufacturers() As Manufacturers
Dim result As New Manufacturers
result.Manufacturer.Add("Bosch")
result.Manufacturer.Add("Siemens")
Return result
End Function
<XmlRoot(ElementName:="Manufacturers")> _
Public Class Manufacturers
<XmlElement("Manufacturer")> _
Public Manufacturer As New List(Of String)
End Class
评论