问题缘由:

XML反序列化出错,XML 文档(2, 2)中有错误,不应有 <configuration xmlns=''>

解决方法:

其实这个是很简单的,因为一般来说都是XML文档书写错误的问题!

只要把你想反序列化的对象,再序列化为XML文档。之后再对比之前出错的XML文档对比,就知道错误在哪了!

 private void SerializeObject(string Xmlname)
{
XmlSerializer ser = new XmlSerializer(typeof(对象类型)); TextWriter writer = new StreamWriter(Xmlname);
ser.Serialize(writer, 对象);//要序列化的对象
writer.Close();
}

调用以上方法,可以把一个对象序列化XML文档(Xmlname:包含路径和Xml文件名)

以上摘自:http://www.cnblogs.com/louyu/archive/2011/01/06/1929038.html

顺手更新了下,见代码:

         /// <summary>
/// 序列化成XML文件
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="path">XML文件位置</param>
private static void SerializeXml<T>(string path) where T : new()
{
T t = new T();
var ser = new XmlSerializer(typeof(T));
TextWriter writer = new StreamWriter(path);
ser.Serialize(writer, t);//要序列化的对象
writer.Close();
}

 问题深入:

 根据上面的方法序列化实体对象,得到的为一个简答的XML文件。但是如果我的XML文件相对略复杂,有多个配置组。 如果只是简单的反序列化,则也会报上面的错误。

经过研究,发现了XML序列化和反序列化的一些规则。一个比较好的资料:http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795.html,在代码的备注里解释的比较详细。

我的解决方法:

反序列化的方法:

        /// <summary>
/// 反序列化
/// </summary>
/// <param name="type">对象类型</param>
/// <param name="filename">文件路径</param>
/// <returns></returns>
public static object XmlDeserialize(Type type, string filename)
{
FileStream fs = null;
try
{
fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
XmlSerializer serializer = new XmlSerializer(type);
return serializer.Deserialize(fs);
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (fs != null)
{
fs.Close();
}
}
}
} //调用:
var obj = (List<类>)XmlDeserialize(typeof(List<类>), path);

XML文件:

<?xml version="1.0" ?>
<ArrayOf类 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<类>
<URI>127.0.0.1:61616</URI>
<TopicName>testTopic</TopicName>
<ClientId>testClient</ClientId>
<MessageType>IBytesMessage</MessageType>
<UserName>admin</UserName>
<Password>admin</Password>
</类>
 <类>
  ........
 </类>
</ArrayOf类>
<!-这里面的类就是指的要反序列化的类的名字,要保持一致。这是多个实体类,所以上层必须要用”ArrayOf类“来说明,必须要保持一致!->

类的定义:

    /// <summary>
/// 实体类
/// </summary>
[XmlRootAttribute("xml", IsNullable = false)]//必须有这个声明,从xml开始为root
public class 类名字
{
    …… ……
  }

以上是我的解决方法。

在文章http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795.html有更详细的解释。

XML文件序列化和反序列化的相关内容的更多相关文章

  1. windows phone8.1:Xml,Json序列化和反序列化

    原文:windows phone8.1:Xml,Json序列化和反序列化 小梦本例主要实现以下四点内容: 将Car对象序列化为xml 将Car对象序列化为Json 将xml反序列化为Car对象 将js ...

  2. XML解析之sax解析案例(一)读取contact.xml文件,完整输出文档内容

    一.新建Demo2类: import java.io.File; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXPar ...

  3. xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................

    xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................

  4. (转)C# Xml进行序列化与反序列化

    ---------------------------------------------------------------文章1---------------------------------- ...

  5. 通过XmlSerializer 实现XML的序列化与反序列化

    通过XmlSerializer 我们可以十分简单的将Model与XML进行转换 官文在点这里 帮助类 using System; using System.Text; using System.Xml ...

  6. XML的序列化和反序列化 详细介绍

    为什么要做序列化和反序列化? 一个回答: 我们都知道对象是不能在网络中直接传输的,不过还有补救的办法.XML(Extensible Markup Language)可扩展标记语言,本身就被设计用来存储 ...

  7. C#实现复杂XML的序列化与反序列化

    已知.xml(再此命名default.xml)文件,请将其反序列化到一个实例对象. Default.XML文件如下: <?xml version="1.0" encoding ...

  8. C# XML对象序列化、反序列化

    XML 序列化:可以将对象序列化为XML文件,或者将XML文件反序列化为对象还有种方法使用LINQ TO XML或者反序列化的方法从XML中读取数据. 最简单的方法就是.net framework提供 ...

  9. C# XML对象序列化、反序列化 - PEPE YU

    http://www.tuicool.com/articles/IjE7ban http://www.cnblogs.com/johnsmith/archive/2012/12/03/2799795. ...

随机推荐

  1. [改善Java代码]易变业务使用脚本语言编写

    建议16: 易变业务使用脚本语言编写 Java世界一直在遭受着异种语言的入侵,比如PHP.Ruby.Groovy.JavaScript等,这些“入侵者”都有一个共同特征:全是同一类语言—脚本语言,它们 ...

  2. [设计模式]<<设计模式之禅>>关于单例模式

     1 我是皇帝我独苗 自从秦始皇确立了皇帝这个位置以后,同一时期基本上就只有一个人孤零零地坐在这个位置.这种情况下臣民们也好处理,大家叩拜.谈论的时候只要提及皇帝,每个人都知道指的是谁,而不用在皇帝前 ...

  3. 自动化中的PageObject思想

    谈着这个话题很大,因为我自己在自动化分层的方面做的就不是很好,最近在做java+selenium中,如果不分层去管理,代码就显得很乱,如下: 下面代码主要是做了一个登录,登录后在修改自己的一些个人信息 ...

  4. Windows中使用cmd实现自定义Service的安装与卸载

    在项目中,有些时候我们需要自定义一些Service来定时处理一些业务逻辑,这时候就涉及到如何安装与卸载service的问题了,具体如何安装呢?在此整理一些解决方案供大家参考: 方案一: 1.运行--〉 ...

  5. Quartz Scheduler(2.2.1) - Working with TriggerListeners and JobListeners

    TriggerListeners and JobListeners Listeners are objects that you create to perform actions based on ...

  6. spring+hibernate管理多个数据源(非分布式事务)

    本文通过一个demo,介绍如何使用spring+hibernate管理多个数据源,注意,本文的事务管理并非之前博文介绍的分布式事务. 这个demo将使用两个事务管理器分别管理两个数据源.对于每一个独立 ...

  7. 和阿文一起学H5-- H5排版八大套路

    二.中心型 三.倾斜型 四.三角形 5.全图形 6.渐变型 7.蒙版型 \ 8.骨骼型 实例

  8. 【ROW_NUMBER 函数(Transact-SQL)】

    [ROW_NUMBER 函数(Transact-SQL)]返回结果集分区内行的序列号,每个分区的第一行从 1 开始. 注释: ROW_NUMBER() OVER (PARTITION BY COL1 ...

  9. ios Swift 算法

    // Playground - noun: a place where people can play import Cocoa var nums = Int[]() ... { nums.appen ...

  10. 在swift中使用oc 的代码

    就是需要一个桥文件, 方法一:在swift项目中,新建一个oc的类,这时候,会弹出一个对话框,你点默认的那个选项就行了.然后在新生成的桥文件中导入你所需要的oc代码的头文件就行了. 方法二:但是有时候 ...