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);
            }
        }
Esempio n. 2
0
 /// <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();
 }