要重写一下WriteEndElement方法:
public class XmlTextWriterEE : XmlTextWriter
{
public XmlTextWriterEE(TextWriter sink)
: base(sink)
{
}
public override void WriteEndElement()
{
base.WriteFullEndElement();
}
}
序列化时,如下使用:
public static string SerializeXML<T>(string xmlFileFullPath, T entity)
{
string errorMsg = string.Empty;
if (string.IsNullOrEmpty(xmlFileFullPath))
{
return "xmlFileFullPath 参数不能为空";
}
try
{
XmlSerializerNamespaces xsn = new XmlSerializerNamespaces();
xsn.Add(String.Empty, String.Empty);
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (TextWriter writer = new StreamWriter(xmlFileFullPath, false, Encoding.UTF8))
{
var xmlTextWrite = new XmlTextWriterEE(writer);
xmlTextWrite.Formatting = Formatting.Indented;
serializer.Serialize(xmlTextWrite, entity, xsn);
writer.Close();
}
//using (FileStream fs = new FileStream(xmlFileFullPath, FileMode.Create))
//{
// XmlSerializer formatter = new XmlSerializer(typeof(T));
// formatter.Serialize(fs, entity);
//}
return "";
}
catch (Exception ex)
{
errorMsg = ex.Message;
}
return errorMsg;
}
顺带把发序列化也给写上:
public static T DeserializeXML<T>(string xmlFileContent) where T : class
{
if (string.IsNullOrEmpty(xmlFileContent))
{
return default(T);
}
try
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
return serializer.Deserialize(EscapeXmlText(ref xmlFileContent)) as T;
}
catch
{
}
return default(T);
}
本文介绍了一个针对XMLTextWriter类的扩展实现,通过重写WriteEndElement方法以支持更全面的元素结束标记写入。此外,还提供了序列化与反序列化的方法示例,帮助开发者更好地理解和使用自定义的XMLTextWriter扩展。
1404

被折叠的 条评论
为什么被折叠?



