在C#XML序列化摆脱数组名 [英] Getting rid of an array name in C# XML Serialization

查看:1140
本文介绍了在C#XML序列化摆脱数组名的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图得到这个结果,而序列化XML:

 <根名称=嗒嗒> 
< SomeKey>&伊利达LT; / SomeKey>
将;组件> 1&下; /组件>
将;组件> 2'; /组件>
将;组件> 3'; /组件>
将;组件> 4℃; /组件>
< /根>



或者换句话说 - 我试图遏制根元素中的数组,一起。附加键



这是我的粗尝试:

  [XmlRootAttribute (的ElementName =根,ISNULLABLE = FALSE)] 
公共类的RootNode
{
[XmlAttribute(姓名)]
公共字符串名称{;组; }

公共字符串SomeKey {搞定;组; }

[XmlArrayItem(元素)]
公开名单< INT>元素{搞定;组; }
}

和我的序列化:

 字符串结果; 
XmlSerializer的序列化=新的XmlSerializer(root.GetType());
StringBuilder的SB =新的StringBuilder();
使用(StringWriter的SW =新的StringWriter(某人))
{
serializer.Serialize(SW,根);
结果= sw.ToString();
}



不过,这是我的结果(删除了清晰的命名空间):

 <根和GT; 
< SomeKey>&伊利达LT; / SomeKey>
<元素>
将;组件> 1&下; /组件>
将;组件> 2'; /组件>
将;组件> 3'; /组件>
< /元素>
< /根>

有什么办法删除了元素的一部分?


< DIV CLASS =h2_lin>解决方案

在阵列中使用的XmlElement属性,这将指示串行序列化数组项作为当前元素的子元素而不是为阵列创建一个新的根元素

  [XmlRootAttribute(的ElementName =根,ISNULLABLE = FALSE)] 
公共类的RootNode
{
[XmlAttribute(姓名)]
公共字符串名称{;组; }

公共字符串SomeKey {搞定;组; }

[的XmlElement(元素)]
公开名单< INT>元素{搞定;组; }
}


I'm trying to get to this result while serializing XML:

<Root Name="blah">
  <SomeKey>Eldad</SomeKey>
  <Element>1</Element>
  <Element>2</Element>
  <Element>3</Element>
  <Element>4</Element>
</root>

Or in other words - I'm trying to contain an array within the "root" element, alongside additional keys.

This is my crude attempt:

[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; }
}

And my serialization:

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();
}

However, this is my result (Removed the namespace for clarity):

<Root>
  <SomeKey>Eldad</SomeKey>
  <Elements>
    <Element>1</Element>
    <Element>2</Element>
    <Element>3</Element>
  </Elements>
</Root>

Is there any way to remove the "Elements" part?

解决方案

Use XmlElement attribute on the Array, this will instruct the serializer to serialize the array items as child elements of the current element and not create a new root element for the array.

[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; } 
} 

这篇关于在C#XML序列化摆脱数组名的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆