2017-03-07 57 views
0

我有下面的XML格式: -序列化XML标签没有名字

<?xml version="1.0"?>   
<Price xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <amount> 
    <currency>USD</currency> 
    100 
    </amount> 
    <amount> 
    <currency>EUR</currency> 
    50 
    </amount> 
</Price> 

的XML值包含在XML根量。我可以知道如何序列化100的价值吗?

[Serializable] 
    [XmlRoot("amount")] 
    public sealed class amount 
    { 
     [XmlElement("currency")] 
     public string currency{ get; set; } 
    } 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var list = new List<amount> {new amount() {Description = "USD"}, new amount() {Description = "EUR"}}; 
      var serializer = new XmlSerializer(typeof(List<amount>), new XmlRootAttribute("Price")); 
      var ms = new MemoryStream(); 
      serializer.Serialize(ms, list); 
      ms.Position = 0; 
      var result = new StreamReader(ms).ReadToEnd(); 
     } 
    } 

回答

2

您可以使用XmlText

[XmlRoot("amount")] 
public sealed class amount 
{ 
    [XmlElement("currency")] 
    public string Description { get; set; } 

    // http://stackoverflow.com/a/1528429/613130 
    [XmlIgnore] 
    public int Value { get; set; } 

    [XmlText] 
    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
    public string ValueXml 
    { 
     get 
     { 
      return XmlConvert.ToString(Value); 
     } 
     set 
     { 
      Value = XmlConvert.ToInt32(value); 
     } 
    } 
} 
+1

您应该使用['XmlConvert.ToDecimal()'](https://msdn.microsoft.com/en-us/library/system.xml .xmlconvert.todecimal(v = vs.110).aspx)和['XmlConvert.Tostring()'](https://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.tostring(v = vs.110).aspx)(或相应的ToInt32()方法)正确地忽略不变格式的文化和解析。 – dbc

+0

@dbc是的,显然它会更好。 – xanatos