Dada una función de deserialización del tipo:
public static T DeserializeXMLToObjectNos encontraremos con problemas cuando el xml no esté bien formado, para evitarlo añadiremos una función de limpieza de caracteres inválidos de la siguiente manera:(string xmlText) { T lResult = default(T); if (string.IsNullOrEmpty(xmlText)) return lResult; XmlSerializer xs = new XmlSerializer(typeof(T)); using (MemoryStream sr = new MemoryStream(UTF8Encoding.UTF8.GetBytes(xmlText))) { XmlTextReader xtr = new XmlTextReader(sr); lResult = (T)xs.Deserialize(xtr); } return lResult; }
public static string RemoveInvalidCharacters(string str) { string stFormD = str.Normalize(NormalizationForm.FormD); StringBuilder sb = new StringBuilder(); for (int ich = 0; ich < stFormD.Length; ich++) { UnicodeCategory uc = CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]); if (uc != UnicodeCategory.NonSpacingMark) { sb.Append(stFormD[ich]); } } return (sb.ToString().Normalize(NormalizationForm.FormC)); }Dejando la función de deserialización de la siguiente manera:
public static T DeserializeXMLToObjectCon esta sencilla función eliminamos los caracteres conflictivos pudiendo generarse el xml sin problemas.(string xmlText) { T lResult = default(T); if (string.IsNullOrEmpty(xmlText)) return lResult; XmlSerializer xs = new XmlSerializer(typeof(T)); using (MemoryStream sr = new MemoryStream(UTF8Encoding.UTF8.GetBytes(RemoveInvalidCharacters(xmlText)))) { XmlTextReader xtr = new XmlTextReader(sr); lResult = (T)xs.Deserialize(xtr); } return lResult; }
No hay comentarios:
Publicar un comentario