2013-03-15 80 views
0

我想創建以下XML:C#XML與屬性序列化的每一個元素

<StartLot> 
     <fileCreationDate level="7">201301132210</fileCreationDate> 
     <fmtVersion level="7">3.0</fmtVersion> 
</StartLot> 

下面是序列化代碼:

[Serializable] 
class StartLot 
{ 
    public fileCreationDate{get; set;} 

    [XmlAttribute("level")] 
    public string level = "7"; 

    public fmtVersion{get; set;} 

    [XmlAttribute("level")] 
    public string level = "7"; ?? 
} 

既然我已經聲明屬性級別,我該怎麼加最後一個屬性?

+1

宇可能必須創建另一種類型的,取看看這個答案http://stackoverflow.com/a/4154801/525138 – Dutts 2013-03-15 20:24:47

+0

'[Serializable]'屬性不影響XML序列化,但它不應該打破任何東西離開它。 – 2013-03-15 20:32:32

回答

2

您可以使用一個包裝類來存儲值,如下面的例子:

public class StackOverflow_15441384 
{ 
    const string XML = @"<StartLot> 
           <fileCreationDate level=""7"">201301132210</fileCreationDate> 
           <fmtVersion level=""7"">3.0</fmtVersion> 
          </StartLot>"; 
    public class StartLot 
    { 
     [XmlElement("fileCreationDate")] 
     public LevelAndValue FileCreationDate { get; set; } 
     [XmlElement("fmtVersion")] 
     public LevelAndValue FmtVersion { get; set; } 
    } 
    public class LevelAndValue 
    { 
     [XmlAttribute("level")] 
     public string Level { get; set; } 
     [XmlText] 
     public string Value { get; set; } 
    } 
    public static void Test() 
    { 
     XmlSerializer xs = new XmlSerializer(typeof(StartLot)); 
     StartLot sl = (StartLot)xs.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(XML))); 
     Console.WriteLine("FCD.L = {0}", sl.FileCreationDate.Level); 
     Console.WriteLine("FCD.V = {0}", sl.FileCreationDate.Value); 
     Console.WriteLine("FV.L = {0}", sl.FmtVersion.Level); 
     Console.WriteLine("FV.V = {0}", sl.FmtVersion.Value); 
    } 
} 
0

我總能找到Linq To Xml更容易使用

var xDoc = XDocument.Parse(xml); /* XDocument.Load(filename); */ 

var items = xDoc.Root.Descendants() 
       .Select(e => new 
       { 
        Name = e.Name.LocalName, 
        Level = e.Attribute("level").Value, 
        Value = e.Value 
       }) 
       .ToList(); 
+1

@Downvoter,等待你的評論... – I4V 2013-03-15 20:30:51

+0

我只是想知道爲什麼要用手動XML生成/解析(儘管通過Xlinq)來替換基於POCO的序列化?另外,你的方法基本上可以檢查任何檢查模式的可能性。 – code4life 2013-03-18 02:50:09