为 XML 序列化命名 List<T> 元素
Naming a List<T> element for XML serialization
我正在尝试将 class 序列化为 XML,但对于 属性 只是一个列表的子元素,我无法得到我想要的结果。
(C#, .Net4.5, 在 WinForms 中尝试)
我的例子如下:
[Serializable]
public class Model
{
public string element = "elTest";
public List<String> roles;
}
我写给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);
}
}
这给了我这样的输出:
<element>elTest</element>
<roles>
<string>testString</string>
</roles>
我如何得到它以便
<string>
在此示例中显示为
<role>
我试过创建另一个 class 角色,它有自己的 属性 并制作了一个列表,但后来我得到了类似
的东西
<roles>
<Role>
<myRole>theRole</myRole>
这不是我想要的。
谢谢。
需要使用属性XmlArrayItem
https://msdn.microsoft.com/en-us/library/vstudio/2baksw0z(v=vs.100).aspx
[Serializable]
public class Model
{
public string element = "elTest";
[XmlArrayItem("role")]
public List<String> roles;
}
class Program
{
static void Main(string[] args)
{
var me = new Model();
me.roles = new List<string>()
{
"testString"
};
var ser = new XmlSerializer(me.GetType());
using (var sw = new StreamWriter("0.xml"))
{
ser.Serialize(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
解决了您的问题。
我正在尝试将 class 序列化为 XML,但对于 属性 只是一个列表的子元素,我无法得到我想要的结果。 (C#, .Net4.5, 在 WinForms 中尝试)
我的例子如下:
[Serializable]
public class Model
{
public string element = "elTest";
public List<String> roles;
}
我写给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);
}
}
这给了我这样的输出:
<element>elTest</element>
<roles>
<string>testString</string>
</roles>
我如何得到它以便
<string>
在此示例中显示为
<role>
我试过创建另一个 class 角色,它有自己的 属性 并制作了一个列表,但后来我得到了类似
的东西 <roles>
<Role>
<myRole>theRole</myRole>
这不是我想要的。
谢谢。
需要使用属性XmlArrayItem
https://msdn.microsoft.com/en-us/library/vstudio/2baksw0z(v=vs.100).aspx
[Serializable]
public class Model
{
public string element = "elTest";
[XmlArrayItem("role")]
public List<String> roles;
}
class Program
{
static void Main(string[] args)
{
var me = new Model();
me.roles = new List<string>()
{
"testString"
};
var ser = new XmlSerializer(me.GetType());
using (var sw = new StreamWriter("0.xml"))
{
ser.Serialize(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
解决了您的问题。