0

致力于 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>
4

2 回答 2

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>

编辑:这假设所有TestEnums 都需要以相同的方式序列化。如果您希望能够为同一类型的不同属性指定不同的 XML 元素名称,请使用 carlosfigueira 的答案。

于 2013-06-03T17:09:27.743 回答
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()));
    }
于 2013-06-03T17:09:46.560 回答