Laden...

Json.NET: Parsen von String in Decimal mit Wissenschaftlicher Notation und JsonProperty

Erstellt von Zicore vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.219 Views
Z
Zicore Themenstarter:in
403 Beiträge seit 2007
vor 10 Jahren
Json.NET: Parsen von String in Decimal mit Wissenschaftlicher Notation und JsonProperty

Hallo Zusammen,

von einer drittanbieter API erhalte ich JSON Strings und verwende für das Parsen Json.NET.
Ich habe nun meine Klasse mit JsonProperty Attributen Dekoriert und das funktioniert soweit alles wunderbar.

Wenn ich jedoch einen String in Exponential Darstellung erhalte, also beispielsweise 1.0E-8, dann erhalte ich natürlich eine Exception.

Die Frage ist nun wie teile ich Json.Net mit das ich gerne NumberStyle.Any beim parsen des Strings verwenden möchte?

Hier etwas code mit einer etwas unschönen, aber dafür funktionierenden Lösung.

        public decimal Volume
        {
            get { return _volume; }
            set { _volume = value; }
        }

        [JsonProperty("volume", Required = Required.Always)]
        public String VolumeString
        {
            get { return Volume.ToString(CultureInfo.InvariantCulture); }
            set { Volume = Decimal.Parse(value, NumberStyles.Any, CultureInfo.InvariantCulture); }
        }

Da ich das ganze wohl öfter implementieren muss, wäre es mir lieber einen weg über Json.NET verwenden zu können.

Grüße

André

16.824 Beiträge seit 2008
vor 10 Jahren

Also bei mir gehts; hät mich jetzt auch gewundert, da ich das auch nutz.

     class Program
    {
        static void Main( string[ ] args )
        {
            const string s = "{ \"Dec\" : 1.0E-8 }";
            var t = JsonConvert.DeserializeObject<TestClass>( s );
        }
    }

    public class TestClass
    {
        public Decimal Dec { get; set; }
    } 

Wenn Du "1.0E-8" statt 1.0E-8 bekommst, dann musst Du natürlich den Weg über nen String gehen, da dann einfach das Serialisieren an der anderen Stelle schon falsch ist.

Z
Zicore Themenstarter:in
403 Beiträge seit 2007
vor 10 Jahren

Hallo Abt,

ich bekomme in der Tat den Wert als String:

"volume":"1.0E-8"

Daran werde ich auch nichts ändern können.

André