Laden...

XML Deserialisierung negativer Dezimalwerte

Erstellt von dermaac vor 10 Jahren Letzter Beitrag vor 10 Jahren 720 Views
D
dermaac Themenstarter:in
29 Beiträge seit 2008
vor 10 Jahren
XML Deserialisierung negativer Dezimalwerte

Moin moin,

ich habe ein kleines Problem und kann bei bestem Willen keine einfache Antwort finden:

Ich möchte einen Import aus einem SAP-System realisieren und habe dafür die Schema-Dateien des SAP-Exportformats erhalten und via xsd.exe daraus die entsprechenden Klassen generiert.

Bei der Deserialisierung scheitert es nun daran, dass negative Werte in der Buchhaltung mit nachgestellten Minuszeichen dargestellt werden und diese ebenfalls im Export-File angewandte Darstellung vom XmlSerializer nicht akzeptiert wird (Exception). Ein Beispiel:

<betrag>0,52-</betrag>
anstatt
<betrag>-0,52</betrag>

Kann ich irgendwie Einfluss auf die Deserialisierung dieser Werte nehmen? Ich bin für jeden Hinweis dankbar!

VG, Marc

L
416 Beiträge seit 2008
vor 10 Jahren

Hallo,
du könntest direkt in deiner Klasse Einfluss nehmen.


public class MyClass
{
    private decimal myValue = 0;
    public String MyValue 
    {
        get { return myValue.ToString(); }
        set { myValue = decimal.Parse(value); }
    }
}

4.942 Beiträge seit 2008
vor 10 Jahren

Hallo,

wie sieht denn der Eintrag zu "betrag" in der zugehörigen XSD aus? Sollte es sich um einen Numeric DataType handeln, dann wäre ein nachfolgendes Minuszeichen gar nicht erlaubt (sondern nur ein "leading sign").

Du könntest natürlich "betrag" als string in deiner Klasse definieren und dann selber die Konvertierung nach decimal durchführen (am besten mittels TryParse und einer geeigneten CultureInfo).

Alternativ noch die ISerializable-Schnittstelle selber implementieren, aber dies ist meistens doch ein wenig zu aufwendig.

D
dermaac Themenstarter:in
29 Beiträge seit 2008
vor 10 Jahren

Danke für die Antworten soweit.

Die Handhabung als String kenne ich bereits. Sollte diese Darstellung für alle numerischen Werte gelten, würde ich ungern diese Lösung nutzen, da die Menge an generiertem Code doch schon erheblich ist, den ich dann zu bearbeiten hätte. Andernfalls ist das natürlich für wenige Tags eine praktikable Möglichkeit, wobei niemals sichergestellt ist, dass der Fehler dann nicht an andere Stelle auftritt, wenn dort zufällig mal ein negativer Wert auftritt.

Und ja, die Spezifikation erlaubt diese Notation tatsächlich nicht (xs:decimal). Das habe ich bereits geprüft und angemerkt, dass die Daten nicht zur Schema-Definition passen. Dennoch wäre es gut, wenn ich einen Workaround in der Hinterhand habe, falls man nicht gewillt ist schema-konforme Daten zu liefern.