public static string ParseExceptionXmlForClassDataContract(Dictionary <string, string> dictMap, string exceptionNamespace, string stringToParse) { using (ExceptionXmlParser parser = new ExceptionXmlParser(dictMap, exceptionNamespace)) { return(parser.ParseExceptionXml(stringToParse)); } }
/* * The reason this function exists is to provide compatibility for ExceptionDataContract to utilize ClassDataContract for deserialization. * In order for ExceptionDataContract to deserialize using ClassDataContract the xml elements corresponding to private fields need * to have their name replaced with the name of the private field they map to. * Example: Message ---replaced to--> _message * * Currently this method utilizes a custom created class entitled ExceptionXmlParser that sits alongside the ExceptionDataContract * The ExceptionXmlParser reads the xml string passed to it exchanges any element names that are presented in the name map * in its constructor. * * The ExceptionXmlParser also gives each nested element the proper namespace for the given exception being deserialized. * The ClassDataContract needs an exact match on the element name and the namespace in order to deserialize the value, because not all serialization * explicitly inserts the xmlnamespace of nested objects, the exception xml parser handles this. */ private XmlReaderDelegator ParseReaderString(XmlReaderDelegator xmlReader) { //The reference to the xmlReader passed into this method should not be modified. //The call to ReadOuterXml advances the xmlReader to the next object if the exception being parsed is a nested object of another class. //When the call to ReadXmlValue that called this method returns, it is possible that the 'xmlReader' will still be used by the calling datacontract. string EntryXmlString = xmlReader.UnderlyingReader.ReadOuterXml(); string result = ExceptionXmlParser.ParseExceptionXmlForClassDataContract(ReverseDictionary(EssentialExceptionFields), this.Namespace.ToString(), EntryXmlString); byte[] byteBuffer = Encoding.UTF8.GetBytes(result); XmlReaderDelegator xmlDelegator = new XmlReaderDelegator(XmlDictionaryReader.CreateTextReader(byteBuffer, XmlDictionaryReaderQuotas.Max)); xmlDelegator.MoveToContent(); return(xmlDelegator); }
public static string ParseExceptionXmlForClassDataContract(Dictionary<string, string> dictMap, string exceptionNamespace, string stringToParse) { using (ExceptionXmlParser parser = new ExceptionXmlParser(dictMap, exceptionNamespace)) { return parser.ParseExceptionXml(stringToParse); } }