2012-01-18 55 views
2

欲序列化/反序列化以下幾種類型:Serialze類與它的內容組單一屬性少元件到一個屬性

// The "NameEntity" element shouldn't appear in the XML 
public class NameEntity 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 
} 

[XmlRoot("names")] 
public class Names : List<NameEntity> 
{ 
} 

我想要的序列化的XML以匹配以下方案:

<?xml version="1.0" encoding="utf-8" ?> 
<names> 
    <name>Charlie</name> 
    <name>Robert</name> 
    <name>Nick</name> 
</names> 

事實上,輸出XML是:

<names> 
    <NameEntity> 
    <name>Charlie</name> 
    </NameEntity> 
    ... 
</names> 

這可能與XML屬性之一在.NET或我將不得不實施IXmlSerializable

回答

2

你需要和XmlText Attribute像這樣的XmlType Attribute的混合物...

// The "NameEntity" element shouldn't appear in the XML 
[XmlType("name")] 
public class NameEntity 
{ 
    [XmlText] 
    public string Name { get; set; } 
} 

[XmlRoot("names")] 
public class Names : List<NameEntity> 
{ 
} 

public class SO 
{ 
    [Test] 
    public void NameEntitySerialization() 
    { 
     var name = new NameEntity() { Name = "Austin" }; 

     var serialized = <YOUR SERIALIZATION CODE HERE> 
     Console.WriteLine(serialized); 
     Assert.AreEqual("<name>Austin</name>", serialized); 
    } 

    [Test] 
    public void ListSerialization() 
    { 
     var names = new Names(); 
     names.Add(new NameEntity() {Name = "Austin"}); 

     var serialized = <YOUR SERIALIZATION CODE HERE> 
     Console.WriteLine(serialized); 
     Assert.AreEqual("<names>\r\n <name>Austin</name>\r\n</names>", 
      serialized); 
    } 
} 
+0

不工作。我已經更新了我的問題。 – Shimmy

+0

@Shimmy:你還添加了「[XmlText]」屬性。那些測試通過了...(這會愚蠢地發佈失敗的測試) –

+0

我的壞對不起:'(我確實用'XmlText'裝飾了'Name'屬性att。但我忘記從之前移除'XmlElement'仍然存在(還有一些其他驗證屬性和其他人,我沒有注意到它)...謝謝! – Shimmy