C# 命名列表<;T>;用于XML序列化的元素

C# 命名列表<;T>;用于XML序列化的元素,c#,.net,xml,serialization,C#,.net,Xml,Serialization,我试图将一个类序列化为XML,但对于属性仅为列表的子元素,我无法得到想要的结果。 (C#,.Net4.5,在WinForms中尝试) 我的例子如下: [Serializable] public class Model { public string element = "elTest"; public List<String> roles; } [可序列化] 公共类模型 { 公共字符串元素=“elTest”; 公开名单角色; } 我将其写入XML priv

我试图将一个类序列化为XML,但对于属性仅为列表的子元素,我无法得到想要的结果。 (C#,.Net4.5,在WinForms中尝试)

我的例子如下:

[Serializable]
public class Model
{
    public string element = "elTest";
    public List<String> roles;
}
[可序列化]
公共类模型
{
公共字符串元素=“elTest”;
公开名单角色;
}
我将其写入XML

    private void button2_Click(object sender, EventArgs e)
    {
        var me = new Model();
        me.roles = new List<string>()
        {
            "testString"
        };
        var ser = new XmlSerializer(typeof(OtherModel));
        using (var sw = new StreamWriter("C:\\temp\\test123.xml"))
        {
            ser.Serialize(sw, me);
        }
    }
private void按钮2\u单击(对象发送者,事件参数e)
{
var me=新模型();
me.roles=新列表()
{
“测试字符串”
};
var ser=新的XmlSerializer(typeof(OtherModel));
使用(var sw=new StreamWriter(“C:\\temp\\test123.xml”))
{
序列(sw,me);
}
}
这给了我这样的输出:

 <element>elTest</element>
  <roles>
    <string>testString</string>
  </roles>
elTest
测试字符串
我怎样才能得到它

<string>

在本例中,显示为

<role>

我试着用自己的属性创建另一个类角色,并制作一个列表,但后来我得到了如下结果

  <roles>
    <Role>
      <myRole>theRole</myRole>

塞罗尔
这不是我想要的


谢谢。

需要使用属性XmlArrayItem

[可序列化]
公共类模型
{
公共字符串元素=“elTest”;
[XmlArrayItem(“角色”)]
公开名单角色;
}
班级计划
{
静态void Main(字符串[]参数)
{
var me=新模型();
me.roles=新列表()
{
“测试字符串”
};
var ser=新的XmlSerializer(me.GetType());
使用(var sw=new StreamWriter(“0.xml”))
{
序列(sw,me);
}
Console.ReadKey(true);
}
}
另存为:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <element>elTest</element>
  <roles>
    <role>testString</role>
  </roles>
</Model>

艾斯特
测试字符串

需要使用属性XmlArrayItem

[可序列化]
公共类模型
{
公共字符串元素=“elTest”;
[XmlArrayItem(“角色”)]
公开名单角色;
}
班级计划
{
静态void Main(字符串[]参数)
{
var me=新模型();
me.roles=新列表()
{
“测试字符串”
};
var ser=新的XmlSerializer(me.GetType());
使用(var sw=new StreamWriter(“0.xml”))
{
序列(sw,me);
}
Console.ReadKey(true);
}
}
另存为:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <element>elTest</element>
  <roles>
    <role>testString</role>
  </roles>
</Model>

艾斯特
测试字符串

需要使用属性XmlArrayItem

[可序列化]
公共类模型
{
公共字符串元素=“elTest”;
[XmlArrayItem(“角色”)]
公开名单角色;
}
班级计划
{
静态void Main(字符串[]参数)
{
var me=新模型();
me.roles=新列表()
{
“测试字符串”
};
var ser=新的XmlSerializer(me.GetType());
使用(var sw=new StreamWriter(“0.xml”))
{
序列(sw,me);
}
Console.ReadKey(true);
}
}
另存为:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <element>elTest</element>
  <roles>
    <role>testString</role>
  </roles>
</Model>

艾斯特
测试字符串

需要使用属性XmlArrayItem

[可序列化]
公共类模型
{
公共字符串元素=“elTest”;
[XmlArrayItem(“角色”)]
公开名单角色;
}
班级计划
{
静态void Main(字符串[]参数)
{
var me=新模型();
me.roles=新列表()
{
“测试字符串”
};
var ser=新的XmlSerializer(me.GetType());
使用(var sw=new StreamWriter(“0.xml”))
{
序列(sw,me);
}
Console.ReadKey(true);
}
}
另存为:

<?xml version="1.0" encoding="utf-8"?>
<Model xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <element>elTest</element>
  <roles>
    <role>testString</role>
  </roles>
</Model>

艾斯特
测试字符串

准确地
XmlArrayItem
解决您的问题。准确地
XmlArrayItem
解决您的问题。准确地
XmlArrayItem
解决您的问题。

准确地
XmlArrayItem
解决您的问题。

您不需要两层角色和角色。不要使用XmlArray,而是使用XmlElement。您不需要两层角色和角色。不要使用XmlArray,而是使用XmlElement。您不需要两层角色和角色。不要使用XmlArray,而是使用XmlElement。您不需要两层角色和角色。不要使用XmlArray,而是使用XmlElement。