Laden...

Float Darstellung Client -> Webservice

Erstellt von zeax vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.882 Views
Z
zeax Themenstarter:in
38 Beiträge seit 2007
vor 13 Jahren
Float Darstellung Client -> Webservice

Hallo,

ich bin neu im Bereich der Webservices. Ich habe mir ein Webservice erstellt der verschiedene Methoden zur Verfügung stellt.

Der Webservice stellt unter anderem eine Methode bereit, die als Parameter ein Objekt pData erwartet. Die Klasse pData implementiert IXmlSerializable. Es funktioniert auch alles wunderbar außer folgendes. pData enthält den Wert myData vom Typ float. Wenn der Floatwert groß genug ist, dann wird er auch in exponentieller Schreibweise übertragen. Ansonsten ohne e Notation.

Wie kann ich meinen Client nun dazu bringen, den Float Wert immer in exponentieller Form zu übertragen.

Folgendes sendet der Client. Der Unterschied der beiden XML-Dateien ist die Größe des Float Wertes. Dadurch wird dieser einmal in exponentieller und einmal ohne dargestellt /übertragen.


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<soap:Header>
		<AuthHeader xmlns="http://test.de">
			<UserName>****</UserName>
			<Password>****</Password>
		</AuthHeader>
	</soap:Header>
	<soap:Body>
		<submit_data xmlns="http://test.de">
			<pd>
				<Key>123-ein-456-Key</Key>
				<TimeStamp>2000-01-01T00:00:00</TimeStamp>
				<Code>123</Code>
				<myData>12.30201</myData>
			</pd>
		</submit_data>
	</soap:Body>
</soap:Envelope>


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<soap:Header>
		<AuthHeader xmlns="http://test.de">
			<UserName>****</UserName>
			<Password>****</Password>
		</AuthHeader>
	</soap:Header>
	<soap:Body>
		<submit_data xmlns="http://test.de">
			<pd>
				<Key>123-ein-456-Key</Key>
				<TimeStamp>2000-01-01T00:00:00</TimeStamp>
				<Code>123</Code>
				<myData>7.242001E+18</myData>
			</pd>
		</submit_data>
	</soap:Body>
</soap:Envelope>

Vielen Dank im voraus.

Gruß

309 Beiträge seit 2008
vor 13 Jahren

Zuerst würde ich sage, die Zahlendarstellung kann durch doch eigentlich wurscht sein, solange alles wieder richtig deserialisiert wird.

Aber IXmlSerializable ist ja gerade dafür gedacht genau steuern zu können wie serialisiert werden soll. Du musst einfach die richtige Format bei der Umwandlung in einen String angeben, die entsprechende .ToString()-Methode ist dein Freund 😉.
Die entsprechenden Formatzeichen findest du hier: Standardmäßige Zahlenformatzeichenfolge

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

Z
zeax Themenstarter:in
38 Beiträge seit 2007
vor 13 Jahren

Danke für deine Antwort.

Das Problem ist das ich Float beim Deserialisieren in einen String umwandle.


float myFloat = 1.354201f;
.
.
.
writer.WriteElementString("myFloat ", myFloat .Value.ToString("0.000000e00").Replace(',','.'));
.
.
.

In der Richtung Webservice -> Client funktioniert das auch alles wunderbar. Client -> Webservice nur wenn die Werte groß genug sind und damit verbunden eine wissenschaftliche Darstellung benötigt wird.

Muss bzw. kann ich auf Clientseite die De/Serialisierung auch beeinflussen oder übernimmt der Client das alles von Webservice Seite aus. Ich bin ja der Meinung zweiteres.

Danke

UPDATE:

Ich habe eine Lösung gefunden, ob die schön und richtig ist sei mal dahingestellt. Es funktioniert auf jedenfall. Mit Hilfe einer SoapExtension (die hatte ich schon) nach dem serialisieren den Stream verändern und dann erst abschicken.

Vielleicht interessiert es jemanden Lösung habe ich hier her:

http://forums.asp.net/p/1137408/4250286.aspx/1?Re+Adding+information+to+the+SOAP+Header