2016-05-10 9 views
0

Ich habe ein Objekt mit einem Attribut, so lange definiert und der genaue Wert ist 635980054734850470 aber wenn es die Ausgabe JSON serialisiert wird gibt mir 635980054734850400ServiceStack Serialisierung von long int Wert

Es scheint konsequent den letzten zwei Ziffer fallen zu werden Werte, anstatt mir den genauen Wert zu geben. Gibt es einen Grund dafür?

Hier ist das Beispiel C# -Code:

[Route("/timestamp", Verbs = "GET")] 
public class GetTimestamp : IReturn<TimestampData> 
{ 

} 

public class TimestampData 
{ 
    public long Timestamp { get; set; } 
} 

public class TimestampService : CustomerServiceBase 
{ 
    public object Get(GetTimestamp request) 
    { 
     var timestamp = DateTime.UtcNow.Ticks; 
     Console.WriteLine(timestamp); 
     return new TimestampData() { Timestamp = timestamp }; 
    } 
} 

Beispielausgabe:

{"Timestamp":635984646884003500} 

Beachten Sie die Ausgabe auf den nächsten Runden immer 100.

+0

Bitte geben Sie den JSON- und C# -Code ein, den Sie verwenden. Bitte versuchen Sie immer, ein [minimal überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu geben, wenn Sie Support-Fragen stellen. – mythz

+0

@mythz Entschuldigung, ich habe das Beispiel C# und Probe JSON-Ausgabe hinzugefügt – vonec

Antwort

2

Die JSON Serializer wie erwartet funktioniert:

var json = "{\"Timestamp\":635980054734850470}"; 
var dto = json.FromJson<TimestampData>(); 
dto.ToJson().Print(); //= {"Timestamp":635980054734850470} 

Und so ist die JSON-Service-Antwort, die Sie durch das Hinzufügen .json, beispiels sehen:

/timestamp.json 

Oder sehen die Antwort in Web Inspector, Fiddler oder anderen Paketinspektor.

Das einzige Mal, wenn ich es sehe Rundung ist in ServiceStack der Auto HTML5 Report Format Seiten, die die JSON-Antwort in ein JavaScript-Objekt analysiert, zum Beispiel:

var model = {"Timestamp":635980054734850470}; 

, die eine JavaScript-Objekt erstellt enthält:

{Timestamp: 635980054734850400} 

Das liegt daran, dass Zahlen in JavaScript als Doppel gespeichert werden, wobei highest integer it can store without losing precision9007199254740992 ist, was weniger als 635980054734850470 ist, was dazu führt, dass etwas Genauigkeit verloren geht.

Verwandte Themen