Frage

Ich bin mit WCF WebInvokeAttribute für deklarative JSON-Anfragen (DataContractJsonSerializer), mit DataContractAttribute / DataMemberAttribute basierter Serialisierung.

Ich bin mit einem Dienst, der JSON Rückkehr unterstützt Daten basierend auf verschiedenen Kulturen enthält. Standardmäßig verwendet dieser Dienst Kultur en-US-Einstellungen, die die Dezimalzahlen bedeutet, dass Separator sein „“.

Ich habe eine Klasse, die eine System.Double Eigenschaft hat. Wenn ich Daten mit Hilfe einer Kultur anfordern, die „“ als Dezimaltrennzeichen verwendet, erhalte ich eine SerializationException beim Versuch, den Wert für diese Eigenschaft deserialisieren, wenn die System.Double Parsen:

  

„Es gab einen Fehler Deserialisieren das Objekt vom Typ XXX. Der Wert‚1,6276‘kann nicht als Typ‚double‘analysiert werden.“

Dies ist sicherlich, weil eine invariante Kultur verwendet wird, während die Doppel-Parsing. Ich hoffte, dass die richtige Kultur auf dem aktuellen Thread Einstellung würde dies beheben, aber es kam nicht.

So werden die Dienste für alle Kulturen brechen wird, der nicht mit „“ als Dezimalzeichen.

Wird Hilfe zu schätzen wissen.

Danke!

War es hilfreich?

Lösung

Nach der JSON-Spezifikation , sollte eine Zahl formatiert wurde über einen Zeitraum verwendet wird. Mit anderen Worten, das Problem ist nicht auf dem Deserializer Teil, auf dem Serializer Teil ist.

Wenn Sie unbedingt ein Komma Trennzeichen verwenden müssen, dann würde ich empfehlen, den Vertrag mit einer Zeichenfolge für den Objekttyp der Einrichtung und bieten eine zusätzliche Eigenschaft auf Ihrer Klasse, die serialisiert wird nicht die Zeichenfolge in eine Dezimalzahl zu konvertieren (die Sie würden dann unabhängig von Kultur, die Sie in der Lage passieren müssen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top