2017-08-29 1 views
1

Unser XML-Format wurde vonGleichbedeutend Attributnamen mit XmlAttribute

geändert
<foo bar="xyz" /> 

zu

<foo abc="xyz" /> 

. Bitte beachten Sie die Änderung des Attributnamens von bar zu abc.

Kann ich beide Attributnamen mit XmlAttribute unterstützen?

Ich habe versucht, das Klassenmitglied mit XmlAttribute zweimal zu kennzeichnen, aber das führt zu einem Fehler Kompilierungszeit.

public sealed class Foo { 
    [XmlAttribute("bar")] // Error: The attribute `System.Xml.Serialization.XmlAttributeAttribute' cannot be applied multiple times 
    [XmlAttribute("abc")] 
    public string bar; 
} 

Jede Idee, wie mit Synonym behandeln Attributnamen ohne eine benutzerdefinierte Deserialisierung für die ganze Foo Klasse zu schreiben?

Antwort

0

einen Weg mit einem Getter gefunden, aber das ist nicht die beste Lösung:

public sealed class Foo { 
    // Both have to be public, otherwise they don't get deserialized 
    [XmlAttribute("bar"), DefaultValue(null)] 
    public string _bar; 
    [XmlAttribute("abc"), DefaultValue(null)] 
    public string _abc; 

    public string bar { 
     get { 
      if (_bar != null) { 
       return _bar; 
      } else { 
       return _abc; 
      } 
     } 
    } 
} 

Der Nachteil ist, dass sowohl _bar und _abc jetzt Teil von Foo ‚s öffentlichen API sind. Außerdem kann ich nicht erklären, dass genau einer von beiden anwesend sein muss.

Verwandte Themen