Xml序列化和反序列化

读取Xml总共有三种方法:XmlTextReader   XmlDoucument   XPath

今天总结下XmlSerialize,xmlSerialize提供两个方法Deserialize(将xml反序列化成对象)和Serialize(将对象序列化城xml)

  一、Serialize   序列化

/// <summary>
        ///  transform target object in to xml file
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="targetO"></param>
        /// <param name="goalPath"> </param>
        /// <returns></returns>
        public static void ToXmlString<T>(T targetO, string goalPath)
        {
            var xmlSerializer = new XmlSerializer(typeof(T));
            var xmlSerializerNamespaces = new XmlSerializerNamespaces();
            xmlSerializerNamespaces.Add("prefix", "prefixValue");
            var settings = new XmlWriterSettings();
            //ignore xml avow  <?xml version="1.0" encoding="utf-8"?>
            settings.OmitXmlDeclaration = true;
            using (var writer = XmlWriter.Create(goalPath, settings))
            {
                xmlSerializer.Serialize(writer, targetO, xmlSerializerNamespaces);
            }
        }

序列化后的结果:

<ArrayOfPerson xmlns:prefix="prefixValue">
  <Person>
    <Name>张三</Name>
    <Age>22</Age>
    <Books>
      <Book>
        <ISBN>123</ISBN>
        <Title>测试书</Title>
      </Book>
    </Books>
  </Person>
</ArrayOfPerson>

以上要说明两点:

  1. xmlSerializerNamespaces是xml序列化的前缀或补充说明,一般会带命名空间等附带信息。如果不想要就可以
    xmlSerializerNamespaces.Add("", "");
  2. xml序列化设置大部分都可以通过XmlWriterSettings来设置的,具体有哪些设置
  名称 说明
Async 获取或设置指示是否可对特定 XmlWriter 实例使用异步 XmlWriter 方法的值。
CheckCharacters 获取或设置指示的值编写 XML 是否应检查确保文档中的所有字符符合 W3C XML 1.0 推荐标准“2.2 个字符”一节。
CloseOutput 获取或设置一个值,该值指示在调用 Close 方法时,XmlWriter 是否还应该关闭基础流或TextWriter
ConformanceLevel 获取或设置 XML 编写检查输出 XML 的遵循级别。
DoNotEscapeUriAttributes 获取或设置指示 XmlWriter 是否转义 URI 属性的值。
Encoding 获取或设置要使用的文本编码的类型。
Indent 获取或设置一个值,该值指示是否缩进元素。
IndentChars 获取或设置缩进时要使用的字符串。 当 Indent 属性设置为 true 时使用此设置。
NamespaceHandling 获取或设置一个值,该值指示在编写 XML 内容时,XmlWriter 是否应移除重复的命名空间声明。 编写器的默认行为是输出编写器的命名空间解析程序中出现的所有命名空间声明。
NewLineChars 获取或设置要用于分行符的字符串。
NewLineHandling 获取或设置一个值,该值指示是否将输出中的分行符正常化。
NewLineOnAttributes 获取或设置一个值,该值指示是否将属性写入新行。
OmitXmlDeclaration 获取或设置一个指示是否忽略 XML 声明的值。
OutputMethod 获取用于序列化 XmlWriter 输出的方法。
WriteEndDocumentOnClose 获取或设置指示调用 Close 方法时,XmlWriter 是否会向所有未关闭的元素标记添加关闭标记的值。3.吃饭打算

 

    二、Deserialize序列化

          

public static T ToXmlTarget<T>(string gogalPath)
        {
            var xmlSerializer = new XmlSerializer(typeof(T));
            using (var xmlStream = new FileStream(gogalPath, FileMode.Open))
            {
                var xmlReader = new XmlTextReader(xmlStream);
                //ignore namespace
                xmlReader.Namespaces = false;
                var target = (T)xmlSerializer.Deserialize(xmlReader);
                return target;
            }
        }

这里当我们碰到带有默认命名空间的xml,有时候会解析错误,因此我们通过xmlReader.Namespaces = false来设置了忽略他的命名空间。

接下来一篇博客,我们将重点讨论XML的Namespaces的作用。

				
时间: 2024-10-13 02:00:17

Xml序列化和反序列化的相关文章

XML 序列化与反序列化

XML序列化与反序列化 1.将一个类转化为XML文件 /// <summary> /// 对象序列化成XML文件 /// </summary> /// <param name="type">对象类型</param> /// <param name="obj">对象</param> /// <param name="fileName">序列化的XML文件路径<

Note4:XML序列化和反序列化

XML序列化和反序列化 待总结!

c# XML序列化与反序列化 属性字段标识

序列化对象 public class People { [XmlAttribute("NAME")] public string Name { set; get; } [XmlAttribute("AGE")] public int Age { set; get; } } [XmlRoot("Root")] public class Student : People { [XmlElement("CLASS")] public

.NET XML序列化与反序列化

闲着没事,写了两个通用的XML序列化与反序列化的方法. 贴出来当作笔记吧! /// <summary> /// XML序列化 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="className"></param> /// <returns></returns> public stat

C#操作XML序列化与反序列化

1 public class XmlSerializerHelper 2 { 3 /// <summary> 4 /// 从XML文件中反序列化读取对象 5 /// </summary> 6 /// <typeparam name="T"></typeparam> 7 /// <param name="filePath"></param> 8 /// <param name="r

XML 序列化 二进制 反序列化 回来

InitializeComponent(); List<WswModel> ListModel = new List<WswModel>(); string FilePath = @"../../XML/UserAddDelectUpdate.xml"; string FilePathBin = @"wsw.wsw"; XmlDocument XmlDoc = new XmlDocument(); BinaryFormatter binary

Xml 序列化 Json 反序列化

#region 全局变量 /// <summary> /// 全局变量 /// </summary> XmlDocument XmlDoc = new XmlDocument(); #endregion #region 加载 public ParseJosn() { InitializeComponent(); ParseJson(XmlPaerseJson()); } #endregion #region Json 转换Model /// <summary> ///

XmlSerializer 对象的Xml序列化和反序列化,XMLROOT别名设置

这篇随笔对应的.Net命名空间是System.Xml.Serialization:文中的示例代码需要引用这个命名空间. 为什么要做序列化和反序列化? .Net程序执行时,对象都驻留在内存中:内存中的对象如果需要传递给其他系统使用:或者在关机时需要保存下来以便下次再次启动程序使用就需要序列化和反序列化. 范围:本文只介绍xml序列化,其实序列化可以是二进制的序列化,也可以是其他格式的序列化. 看一段最简单的Xml序列化代码 1 2 3 4 5 6 7 8 9 10 11 12 class Prog

Xml序列化、反序列化帮助类

之前从网络上找了一个Xml处理帮助类,并整理了一下,这个帮助类针对Object类型进行序列化和反序列化,而不需要提前定义Xml的结构,把它放在这儿供以后使用 1 /// <summary> 2 /// 功能:Xml序列化.反序列化帮助类 3 /// 说明: 4 /// 创建人: 5 /// 创建时间:2014年3月13日 6 /// </summary> 7 public static class XmlHelper 8 { 9 /// <summary> 10 ///

Json/XML序列化和反序列化

1.json序列化和反序列化 序列化是将对象状态转换为可保持或传输的格式的过程; 反序列化,它将流转换为对象; 1)Json.Net 推荐使用Json.Net类库,需要引入的命名空间; 序列化:JsonConvert.SerializeObject 反序列化:JsonConvert.DeserializeObject 2)使用JavaScriptSerializer类 使用JavaScriptSerializer方式需要引入的命名空间,这个在程序集System.Web.Extensions.dl