在C# XML序列化中去掉数组名称

9

我正在尝试将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>

有没有什么方法可以删除“Elements”部分?
2个回答

18

使用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; } 
} 

使用字典是不行的,因为我们需要手动浏览项目。 :( - Nolmë Informatique

-1
感谢Chris Taylor为我的问题提供的答案。使用asmx web服务,我得到了以下XML:
<Manufacturers>
    <Manufacturer>
        <string>Bosch</string>
        <string>Siemens</string>
    </Manufacturer>
</Manufacturers>

我想直接在 select 元素中获取制造商名称,去掉这个 option 元素,就像这样:
<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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接