2017-03-07 5 views
0

Ich habe folgendes XML-Format: -Serialize XML ohne Tag-Namen

<?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> 

den XML-Wert enthält den Betrag in der XML-Wurzel. Darf ich wissen, wie kann ich den Wert von 100 & 50 serialisieren?

[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(); 
     } 
    } 

Antwort

2

können Sie XmlText verwenden:

[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

Sie verwenden sollten, [ 'XmlConvert.ToDecimal()'] (https://msdn.microsoft.com/en-us/library/system.xml .xmlconvert.todecimal (v = vs.110) .aspx) und ['XmlConvert.Tostring()'] (https://msdn.microsoft.com/en-us/library/system.xml.xmlconvert.tostring (v = vs.110) .aspx) (oder die entsprechende 'ToInt32()' Methode), um Kultur korrekt zu ignorieren und in einem invarianten Format zu analysieren. – dbc

+0

@dbc Ja, klar wäre es formal besser. – xanatos