So deserialisieren Sie JSON mit einer unbenannten Sammlung von Typen mithilfe von DataContractSerializer
Ich verwende den Webdienst, um Daten über die zurückgelegte Strecke abzurufen. Dann verwende ich Deserializer, um es zu analysieren. So sieht JSON aus:
[{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5]
Mit dieser Antwort hatte ich einige Probleme. Warum wird in eine Sammlung eingebunden und wie lege ich das Objektmodell fest? Es wurde auch über ein spezielles __type Attribut geklagt. Also habe ich die Zeichenfolge "gehackt" und "vorbereitet":
// Cut off first and last charachters [] - they send objects as arrays
rawJSON = rawJSON.Substring(1, rawJSON.Length - 2);
// Hide "__type" attribute as it messes up serializer with namespace
rawJSON = rawJSON.Replace("__type", "type");
Dann hat alles mit diesem Objekt geklappt:
[DataContract]
public class PCMilerResponse
{
[DataMember(Name = "Errors", EmitDefaultValue = false)]
public PCMilerError[] Errors { get; set; }
[DataMember(Name = "TMiles", EmitDefaultValue = false)]
public decimal DrivingDistance { get; set; }
}
Nun habe ich den Aufruf des Webdienstes geändert und erhalte die folgende Antwort
[
{"__type":"CalculateMilesReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"TMiles":445.5},
{"__type":"GeoTunnelReport:http:\/\/pcmiler.alk.com\/APIs\/v1.0","RouteID":null,"GeoTunnelPoints":
[{"Lat":"34.730466","Lon":"-92.247147"},{"Lat":"34.704863","Lon":"-92.29329"},{"Lat":"34.676312","Lon":"-92.364654"},{"Lat":"29.664271","Lon":"-95.236735"}]
}
]
Jetzt macht es Sinn, warum es Array und "__type" gibt. Aber ich bin nicht sicher, wie ich ein Objekt schreiben soll, um es richtig zu analysieren. Ich denke, spezielle Attribute müssen angewendet werden, und möglicherweise muss ein generisches Array vorhanden sein. Irgendeine Hilfe, wie man es richtig deserialisiert?
P.S. Ich kann noch mehr hacken und diese Zeichenfolgen ersetzen, sodass es ein Objekt mit 2 Objekten enthält, aber ich frage mich, ob es eine "richtige" Möglichkeit gibt, damit umzugehen.