处理XML序列化。序列化枚举类型时,要更改它的xml元素名称。任何帮助将不胜感激。
我正在使用.Net xml序列化来序列化这个对象并产生下面的xml输出
<MyEnums> <MyEnum>One</MyEnum> <MyEnum>Two</MyEnum> <MyEnum>Three</MyEnum></MyEnums>
这是班级
public class Request
{
public List<MyEnum> MyEnums { get; set; }
}
这是我想要发出的XML
<MyEnums>
<ModifiedElementName>One</ModifiedElementName>
<ModifiedElementName>Two</ModifiedElementName>
<ModifiedElementName>Three</ModifiedElementName>
这是枚举类型
enum MyEnum
{
One,
Two,
Three
}
期望输出为xml
<ModifiedElementName>One</ModifiedElementName>
答案 0 :(得分:5)
您可以使用XmlType
上的enum
属性,如下所示:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
namespace Scratch
{
[XmlType("ModifiedEnumName")]
public enum TestEnum
{
One,
Two,
Three,
}
public class TestClass
{
public TestClass()
{
MyEnums = new List<TestEnum>();
}
public List<TestEnum> MyEnums { get; set; }
}
static class Program
{
static void Main(string[] args)
{
using (var sw = new StringWriter())
{
new XmlSerializer(typeof(TestClass)).Serialize(sw, new TestClass { MyEnums = { TestEnum.Two } });
Console.WriteLine(sw.GetStringBuilder());
}
}
}
}
此输出
<?xml version="1.0" encoding="utf-16"?>
<TestClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<MyEnums>
<ModifiedEnumName>Two</ModifiedEnumName>
</MyEnums>
</TestClass>
编辑:这假设所有TestEnum
都需要以相同的方式序列化。如果您希望能够为同一类型的不同属性指定不同的XML元素名称,请使用carlosfigueira的答案。
答案 1 :(得分:1)
您可以使用[XmlElement]
,[XmlArray]
和[XmlArrayItem]
属性来获取所需内容。下面的示例使用最后两个来获得我认为您需要的内容,但可以随意与其他人一起使用以获得您想要输出的XML。
public class Request
{
[XmlArray(ElementName = "MyEnums")]
[XmlArrayItem(ElementName = "ModifiedElementName")]
public List<MyEnum> MyEnums { get; set; }
}
public enum MyEnum
{
One,
Two,
Three
}
public static void Test()
{
XmlSerializer xs = new XmlSerializer(typeof(Request));
MemoryStream ms = new MemoryStream();
Request req = new Request
{
MyEnums = new List<MyEnum>
{
MyEnum.One,
MyEnum.Two,
MyEnum.Three
}
};
xs.Serialize(ms, req);
Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}