public static DataSet <T> Deserialize(FileInfo file) { try { using (StreamReader streamReader = new StreamReader(file.OpenRead())) using (JsonReader reader = new JsonTextReader(streamReader)) { var serializer = new JsonSerializer(); DataSet <T> output = serializer.Deserialize <DataSet <T> >(reader); return(output); } } catch (Exception ex) { // Try and load old-style DataSets here try { DataSet <IncidentData> output = new DataSet <IncidentData>(); FileInfo tempFile = new FileInfo(Path.GetTempFileName()); using (StreamReader streamReader = new StreamReader(file.OpenRead())) using (StreamWriter tempWriter = new StreamWriter(tempFile.OpenWrite())) { while (!streamReader.EndOfStream) { var line = streamReader.ReadLine() .Replace("DataSet", "DataSet016") .Replace("IncidentData", "IncidentData016") .Replace("ResponseData", "ResponseData016"); tempWriter.WriteLine(line); } } using (StreamReader tempReader = tempFile.OpenText()) using (JsonReader jsonReader = new JsonTextReader(tempReader)) { JsonSerializer jsonSerializer = new JsonSerializer { PreserveReferencesHandling = PreserveReferencesHandling.All, TypeNameHandling = TypeNameHandling.All }; var oldDataSet = jsonSerializer.Deserialize <DataSet016 <IncidentData016> >(jsonReader); foreach (IncidentData016 oldIncident in oldDataSet) { IncidentData incident = new IncidentData(data: oldIncident.Data); foreach (ResponseData016 oldResponse in oldIncident.Responses) { ResponseData response = new ResponseData(oldResponse.Id, oldResponse.Data, oldResponse.TimingData.ToArray()); incident.Responses.Add(response); } output.Add(incident); } } tempFile.Delete(); return(output as DataSet <T>); } catch (Exception ex2) { throw new Exception(string.Format("String does not contain valid DataSet JSON: {0} {1}", ex, ex2)); } } }
public static DataSet <T> DeserializeJson(string json, bool forceOldStyle = false) { Exception lastEx = null; if (!forceOldStyle) { try { DataSet <T> output = JsonConvert.DeserializeObject <DataSet <T> >(json); return(output); } catch (Exception ex) { lastEx = ex; } } // Try and load old-style DataSets here try { if (typeof(T) == typeof(IncidentData)) { json = json.Replace("DataSet", "DataSet016"); json = json.Replace("IncidentData", "IncidentData016"); json = json.Replace("ResponseData", "ResponseData016"); DataSet016 <IncidentData016> oldDataSet = JsonConvert.DeserializeObject <DataSet016 <IncidentData016> >(json, new JsonSerializerSettings() { PreserveReferencesHandling = PreserveReferencesHandling.Objects, TypeNameHandling = TypeNameHandling.Auto }); DataSet <IncidentData> output = new DataSet <IncidentData>(); foreach (IncidentData016 oldIncident in oldDataSet) { IncidentData incident = new IncidentData(data: oldIncident.Data); foreach (ResponseData016 oldResponse in oldIncident.Responses) { ResponseData response = new ResponseData(oldResponse.Id, oldResponse.Data, oldResponse.TimingData.ToArray()); incident.Responses.Add(response); } output.Add(incident); } return(output as DataSet <T>); } else { throw new NotImplementedException(); } } catch (Exception ex2) { throw new Exception(string.Format("String does not contain valid DataSet JSON: {0} {1}", lastEx, ex2)); } }
public IncidentData(IncidentData source) { Id = source.Id; Time = source.Time; Location = source.Location; Longitude = source.Longitude; Latitude = source.Latitude; foreach (KeyValuePair <string, object> kvp in source.Data) { Data.Add(kvp.Key, kvp.Value); } Data["Responses"] = new DataSet <ResponseData>(this); Responses.AddRange(source.Responses); Intern(); }