public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { try { JObject obj = JObject.Load(reader); Object root = null; // TODO: Use xmlString to solve issue of empty vs null elements if (xmlString != null) { string formatXML = ""; //-- Formatting XML for deserialization XDocument maDoc = XDocument.Parse(xmlString, LoadOptions.None); var xmlWriter = new StringWriter(); maDoc.Save(xmlWriter); formatXML = xmlWriter.ToString(); string formattedJson = NIEMUtil.xmlToJson(formatXML); reader = new JsonTextReader(new StringReader(formattedJson)); } else { //-- Converting JSON back to XML string so it can be formatted for deserialization string rootJson = obj.SelectToken("maid:MutualAidDetail").ToString(); XDocument xmlDoc = JsonConvert.DeserializeXNode(rootJson, "maid--MutualAidDetail"); StringWriter xmlWriter = new StringWriter(); xmlDoc.Save(xmlWriter); string xml = xmlWriter.ToString(); string formattedJson = NIEMUtil.xmlToJson(xml); reader = new JsonTextReader(new StringReader(formattedJson)); } //-- Now starting deserialization obj = JObject.Load(reader); root = null; JToken aidReq = obj.SelectToken("maid--MutualAidDetail.maid--AidRequested"); JToken aidRes = obj.SelectToken("maid--MutualAidDetail.maid--AidResponding"); if (aidReq != null) { JsonSerializerSettings setting = new JsonSerializerSettings(); setting.Converters.Add(new deserialRequestedResourceConvert()); setting.DateFormatHandling = DateFormatHandling.IsoDateFormat; string json = aidReq.ToString(); AidRequested ar = JsonConvert.DeserializeObject <AidRequested>(json, setting); root = Activator.CreateInstance(typeof(MutualAidDetail), ar); } else if (aidRes != null) { JsonSerializerSettings setting = new JsonSerializerSettings(); setting.Converters.Add(new deserialRespondingResourceConvert()); setting.DateFormatHandling = DateFormatHandling.IsoDateFormat; string json = aidRes.ToString(); AidResponding ar = JsonConvert.DeserializeObject <AidResponding>(json, setting); root = Activator.CreateInstance(typeof(MutualAidDetail), ar); } else { // no resources, invalid throw new JsonSerializationException("Message not defined. Must be AidResponding or AidRequesting Message"); } return(root); } catch (Exception e) { return(null); } }
/// <summary> /// Initializes a new instance of the MutualAidDetail class /// </summary> public MutualAidDetail() { xmlnsAttributes = new List <XAttribute>(); prefixList = XElement.Parse(NIEMSharp.Properties.Resources.NameSpacePrefixMapping); xmlnsAttributes = NIEMUtil.readMapping(); }