码迷,mamicode.com
首页 > 其他好文 > 详细

Xml序列化和反序列化

时间:2015-01-02 23:42:41      阅读:453      评论:0      收藏:0      [点我收藏+]

标签:

     读取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的作用。

 



Xml序列化和反序列化

标签:

原文地址:http://www.cnblogs.com/cainiaoguoshi/p/4198960.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!