Ich poste diese Frage nach dem Lesen der verfügbaren Beiträge. Ich habe einen ASP.NET-Web-API-Controller mit folgenden Methoden.JSON String Deserialisierung zu benutzerdefinierten Objekt
[DataContract]
public class CustomPerson
{
[DataMember]
public ulong LongId { get; set; }
}
[DataContract]
public class Employee : CustomPerson
{
[DataMember]
public string Name { get; set; }
[DataMember]
public string Address { get; set; }
}
dann in der Steuerung
public class CustomController : ApiController
{
[HttpPost]
[ActionName("AddEmployee")]
public bool AddEmployee(Employee empInfo)
{
bool bIsSuccess = false;
// Code loginc here
bIsSuccess = true;
return bIsSuccess;
}
[HttpPost]
[ActionName("AddEmployeeCustom")]
public async Task<bool> AddEmployeeCustom()
{
string rawRequest = await Request.Content.ReadAsStringAsync();
bool bIsSuccess = false;
// Code loginc here
try
{
Employee emp = JsonConvert.DeserializeObject<Employee>(rawRequest);
}
catch (Exception ex)
{ }
return bIsSuccess;
}
}
Wenn ich die folgende Anforderung über Seife AddEmployee nennen ui das individuelle Objekt ohne Fehler also der leere Wert für LongId empfangen wird
ignoriert{
"Name": "test1",
"Address": "Street 1",
"LongId": ""
}
Wenn ich die AddEmployeeCustom-Methode aufruft, löst die Laufzeit die Ausnahme aus:
Error converting value "" to type 'System.UInt64'. Path 'LongId', line 4, position 14.
Eine Option, die ich lese, ist die eingehende Zeichenfolge in JObject konvertieren und dann Objekt der Employee-Klasse erstellen, aber ich versuche zu verstehen und das Verhalten der Standard-Request-Handling-Mechanismus nachzuahmen, wenn die eingehende Anfrage automatisch vom Controller behandelt und deserialisiert wird zu Mitarbeiterobjekt
Ihre Änderung Aufruf ' LongId 'zu einem' ulong? ' – Jonesopolis
' LongId' erwartet eine Zahl und keine leere Zeichenkette – user12345
Welcher 'long' Wert sollte' 'LongId" entsprechen: "" '? – Sinatr