2009-04-03 6 views
1

Ich bin mit WCF WebInvokeAttribute für deklarative JSON-Anfragen (DataContractJsonSerializer), mit DataContractAttribute/DataMemberAttribute basierte Serialisierung.WebInvoke/DataContractJsonSerializer, '1,6276' nicht als 'double' analysiert werden

Ich benutze einen Dienst, der die Rückgabe von JSON mit Daten basierend auf verschiedenen Kulturen unterstützt. Standardmäßig verwendet dieser Dienst en-US-Kultureinstellungen, was bedeutet, dass das Dezimaltrennzeichen "." Ist.

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

„Es war ein Fehler, das Objekt deserialisiert vom Typ XXX. Der Wert '1,6276' kann nicht als Typ 'doppelt' geparst werden. "

Dies ist sicherlich, weil eine invariante Kultur verwendet wird, während der Double zu analysieren. Ich hoffte, dass das Einstellen der richtigen Kultur auf dem aktuellen Thread dies beheben würde, aber es tat es nicht.

So werden die Dienste für Kulturen, die nicht verwenden "." als Dezimaltrennzeichen.

Ich werde die Hilfe zu schätzen wissen.

Danke!

+0

Bitte erläutern Sie ein wenig besser, warum Kultur ein Faktor in Ihrem Dienst ist und wie sich dieser von anderen Diensten unterscheidet. Ich hätte erwartet, von diesem Problem schon einmal gehört zu haben, wenn es üblich war. –

+0

Dies ist der Service-Client: http://www.codeproject.com/KB/WCF/GeoNames-WCFClient.aspx Ein Benutzer dieser Komponente entdeckte zuerst diesen Fehler, lesen Sie den Dererialization Error-Thread am unteren Rand. Vielen Dank – baretta

Antwort

3

Entsprechend der JSON Specification sollte eine Zahl mit einem Punkt formatiert werden. Mit anderen Worten, das Problem liegt nicht im Deserializer-Teil, sondern im Serialisierungsteil.

Wenn Sie unbedingt ein Kommatrennzeichen verwenden müssen, würde ich empfehlen, den Vertrag mit einer Zeichenfolge für den Eigenschaftstyp einzurichten und eine zusätzliche Eigenschaft für Ihre Klasse bereitzustellen, die nicht serialisiert ist, um die Zeichenfolge in eine Dezimalzahl zu konvertieren (was du dann in der Lage sein würdest, die Kultur zu vermitteln, die du brauchst).

Verwandte Themen