2013-03-15 81 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