2013-06-03 80 views
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> 
+0

請問您可以顯示您正在嘗試的操作,以及它爲什麼不像您期望的那樣工作?很難看出你究竟在問什麼。 –

+0

您還可以顯示示例類(或類) - 如果要使用Enum對一個特定的類或所有類進行更改,則不完全清楚。 –

+0

爲什麼你不在enum = 1中創造第一個值,其餘的將按照「序數」序列?另外,你怎麼序列化枚舉?你是否有這樣的代碼,或者你是否希望有人爲你寫這些代碼..? – MethodMan

回答

5

您可以使用您的enumXmlType屬性,就像這樣:

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

你可以玩[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())); 
    } 
+0

啊,你的答案顯示瞭如何修改這個屬性,而不是每個類型(如我的答案)。哪個更好取決於情況,很可能是你的答案。 – hvd