Konvertieren lange Zahl als string in die Serialisierung
Habe ich eine custom made-Klasse, verwenden Sie eine lange ID. Allerdings, wenn ich meine Aktion mit ajax, meine ID ist abgeschnitten, und er verliert die letzten 2 zahlen, weil javascript verliert an Präzision, wenn es um große zahlen. Meine Lösung wäre, einen string an javascript, aber die ID haben, bleiben so lange auf der server-Seite.
Gibt es eine Möglichkeit zum serialisieren der Eigenschaft als string? Ich bin auf der Suche nach irgendeiner Art von Attribut.
Controller
public class CustomersController : ApiController
{
public IEnumerable<CustomerEntity> Get()
{
yield return new CustomerEntity() { ID = 1306270928525862486, Name = "Test" };
}
}
Modell
public class CustomerEntity
{
public long ID { get; set; }
public string Name { get; set; }
}
JSON-Ergebnis
[{"Name":"Test","ID":1306270928525862400}]
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnte Sie wahrscheinlich erstellen Sie eine benutzerdefinierte
JsonConverter
und wenden es auf Ihr Eigentum.Folgenden ist ein Beispiel (HINWEIS: ich habe nicht verwendet diese api, bevor Sie also es könnte wahrscheinlich verbessert werden mehr, aber die folgenden sollten Sie eine Ungefähre Idee):
Web-API-Aktion:
Anfrage:
Antwort:
BEARBEITEN:
wenn Sie nicht möchten, verzieren Sie die Eigenschaft mit einem Attribut, könnten Sie stattdessen fügen Sie es auf die Konverter-Sammlung. Beispiel:
CustomerEntity
long?
(Nullable<long>
) das ist manchmal sehr nützlich.Wie wäre es mit einem
view model
nurstring
Eigenschaften, wie z.B. diese:Nun Sie sind nur den Umgang mit
string
s undJSON
Serialisierung Probleme Weg.CustomerEntity
model-Klasse auf dieCustomerEntityViewModel
und pass, der zum client, dann bei der Rückkehr auf den server, könnte es zurück konvertiert werden, um eineCustomerEntity
Klasse und die ID ist einlong
wieder. Ich Stimme zu es wird durch Reifen springen, aber wenn Präzision erforderlich ist, dann ist eine gewisse Umstellung aufstring
passieren muss, um irgendwo.Würde ich wahrscheinlich nur schaffen, einen anonymen Typ, wenn ich Nenn das json-serializer wie;
In dem Fall, wo deine Klasse hat 20 oder etwas Bereichen und dies wird eine sehr hässliche Lösung, würde ich einen string hinzufügen, die so genannte class
ID
ändern Sie die langelID
oder so und verwenden Sie die serializer-Einstellungen zu ignorieren, die lange beim serialisieren, so dass die resultierende json, werden nur die string-version.Gibt es verschiedene Attribute, die diese Aufgabe für Beispiel;
Wird nicht serialisiert
_ID
Je nach Fall, könnten Sie möglicherweise verwenden, Getter und setter, die maskerade der Eigenschaft als string während der JSON-Serialisierung.
Vielleicht ein gangbarer workaround wäre die Verwendung von einem anderen Typ für die ID? Man könnte ein GUID zum Beispiel. Mit einer GUID, die Sie nie aus der Grenzen und auch dieser wird serialisiert als string-standardmäßig glaube ich.