如何将XML与O“.NET研究”BJECT进行相互转换(泛型以及通用方法)

  对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错。它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成。比哥一年前写的那个牛多了,哈哈,哥去年乱写了个网页版的(http://www.cnblogs.com/jasenkin/archive/2010/02/11/1667511.html),现在看一年前的代码,哥感叹,这个谁写的代码,TMD实在写的太烂了!!!当然,ORMCodeHelper与CodeSmith相比,还是有差距的哦。霖哥以前给我的codesmith模板(N层的),哥一直没时间仔细看,哥知道那个模板可以把所有的代码全部生成,其中包括N层代码、存储过程、页面等等。虽然时间就像乳沟,只要挤一挤总还是有的!但是,哥真的......本来9号哥都是请假休息的,唉,又要哥上班了....

还有就是对于MVC3,Razor实在太给力了,扔掉MVC2吧,哈哈,@确实挺不错的。

  在ORMCodeHelper中,对于配置文件的使用的思路还是不错的,哥学以致用,提炼个泛型的出来(其实最主要的还是插件开发的架构)。对于XML与OBJECT的转换来说,下面讲的是一种Serialize方法。其实哥还有另外一种通过反射将XML转换成对象的方法,不过,涉及到公司****,那种方法还是不写了。当然,那种方法哥是可以横着写了(因为哥早就背在心里了),哈哈,通用的代码....

  先看代码,如下:

    public static class Serializer
    {

        public static void Serialize<T>(string filePath, T[] array)  where T:new()
        {
            if (string.IsNullOrEmpty(filePath)||
                array == null||array.Length==0)
            {
                return;
            }

            try
            {
                XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                XmlSerializer xmlSerializer =
                    xmlSerializerFactory.CreateSerializer(array.GetType(), typeof(T).Name);
                Stream stream = new FileStream(filePath, FileMode.Create);
                xmlSerializer.Serialize(stream, array);
                stream.Close();
            }
            catch
            {
            }
        }

        public static void Serialize(string filePath, object obj)
        {
            if (string.IsNullOrEmpty(filePath) || obj == null)
            {
                return;
            }

            try
            {
                XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                XmlSerializer xmlSerializer =
                    xmlSerializerFactory.CreateSerializer(obj.GetType(), obj.GetType().Name);
                Stream stream = new FileStream(filePath, FileMode.Create);
                xmlSerializer.Serialize(stream, obj);
                stream.Close();
            }
            catch
            {
            }
        }

    }

        public static List<T> Deserialize<T>(string filePath)  where T:new()
 &nbsp上海企业网站制作;      {
            List<T> results=new List<T>();
            if (string.IsNullOrEmpty(filePath)||!File上海企业网站设计与制作.Exists(filePath))
            {
                re上海闵行企业网站制作turn results;
            }

            object obj = null;
            try
            {
                XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
            &上海网站建设nbsp;   XmlSerializer xmlSerializer =
                    xmlSerializerFactory.CreateSerializer(typeof(T[]), typeof(T).Name);
                Stream stream = new FileStream(filePath, System.IO.FileMode.Open);
                obj = xmlSerializer.Deserialize(stream);
                stream.Close();

                results.AddRange(obj as T[]);
            }
            catch
            {
            }
           
            return results;
        }

        public static object Deserialize(string filePath, Type targetType)
        {
            if (string.IsNullOrEmpty(filePath)||!File.Exists(filePath)
                || targetType == null)
            {
                return null;
            }

            object obj = null;
            try
            {
                XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                XmlSerializer xmlSerializer =
                    xmlSerializerFactory.CreateSerializer(targetType, targetType.Name);
                Stream stream = new FileStream(filePath, FileMode.Open);
                obj = xmlSerializer.Deserialize(stream);
                stream.Close();
            }
            catch
            {
            }

            return obj;
        }

  从上面4个方法,可以看出主要是通过XmlSerializer将对象序列化为XML以及将XML反序列化为对象,这种方法比较简单,而且易用。

  (一)Serialize<T>(string filePath, T[] array),Deserialize<T>(string filePath)

  通过单元测试来看看Serialize<T>(string filePath, T[] array)方法生成的XML内容,先注释掉//DeleteFile(filePath);

public void SerializeTestHelper(AppSetting[] inputs)
        {
            AppSetting[] settings = inputs;
            string filePath = @"d:\" + typeof(AppSetting).Name + ".config";

            Serializer.Serialize<AppSetting>(filePath, settings);
            List<AppSetting> results = Serializer.Deserialize<AppSetting>(filePath);

            int length = results.Count;
            Assert.IsTrue(length == settings.Length);

            for (int index = 0; index < length; index++)
            {
                Assert.IsTrue(results[index].Value == settings[index].Value);
                Assert.IsTrue(results[index].Key == settings[index].Key);
                Assert.IsTrue(results[index].Author == settings[index].Author);
            }

            //DeleteFile(filePath);
        }

  生成的XML如下:

<?xml version="1.0"?>
<ArrayOfAppSetting xmlns:xsi="http://ww上海闵行企业网站设计与制作w.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AppSetting">
  <AppSetting>
    <Key>key0</Key>
    <Value>value0</Value>
    <Author>author0</Author>
  </AppSetting>
  <AppSetting>
    <Key>key1</Key>
    <Value>value1</Value>
    <Author>author1</Author>
  </AppSetting>
  <AppSetting>
    <Key>key2</Key>
    <Value>value2</Value>
    <Author>author2</Author>
  </AppSetting>
</ArrayOfAppSetting>

  从上面的单元测试可以看出:通过Serialize<T>(string filePath, T[] array)方法将对象数组生成XML内容,可以通过Deserialize<T>(string filePath)将XML内容转换成相应的对象数组,内容相一致。

  (二)Serialize(string filePath, object obj),Deserialize(string filePath, Type targetType)
  通过单元测试来看看Serialize(string filePath, object obj)方法生成的XML内容,先注释掉//DeleteFile(filePath);

private static void SerializeTestHelper()
        {
            AppSetting setting = new AppSetting()
            {
                Author = "AuthorTest",
                Key = "KeyTest",
                Value = "ValueTest"
            };
            string filePath = @"d:\" + typeof(AppSetting).Name + ".config";

            Serializer.Serialize(filePath, setting);
            AppSetting result = Serializer.Deserialize(filePath, typeof(AppSetting)) as AppSetting;

            Assert.IsTrue(result.Value == setting.Value);
            Assert.IsTrue(result.Author == setting.Author);
            Assert.IsTrue(result.Key == setting.Key);

            //DeleteFile(filePath);
        }

  生成的XML如下:

上海徐汇企业网站制作class="cnblogs_code">

<?xml version="1.0"?>
<AppSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="AppSetting">
  <Key>KeyTest</Key>
  <Value>ValueTest</Value>
  <Author>AuthorTest</Author>
</AppSetting>

  从上面的单元测试可以看出:通过Serialize(string filePath, object obj)方法将对象生成XML内容,可以通过Deserialize(string filePath, Type targetType)将XML内容转换成相应的对象,内容相一致。其中,object也可以是对象数组的,这个留给读者自己去验证。

  测试都是可以通过的,这里仅仅是验证正确的功能,如下图:

时间: 2024-07-30 09:58:44

如何将XML与O“.NET研究”BJECT进行相互转换(泛型以及通用方法)的相关文章

使用泛型以及通用方法将XML与OBJECT进行相互转换

过年的这段时间一直没有闲着,总体来说可以分为以下2个部分的学习. 1:ORMCodeHelper的参考 与学习. 2:MVC3的学习. 对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用 ,个人感觉还是比较爽的,架构不错.它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码 的生成.比哥一年前写的那个牛多了,哈哈,哥去年乱写了个网页版的 (http://www.cnblogs.com/jasenkin/archive/20

如何将XML与OBJECT进行相互转换(泛型以及通用方法)

对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错.它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成.比哥一年前写的那个牛多了,哈哈,哥去年乱写了个网页版的(http://www.cnblogs.com/jasenkin/archive/2010/02/11/1667511.html),现在看一年前的代码,哥感叹,这个谁写的代码,TMD实在写的太烂了!!!当然,ORMCodeHel

一起谈.NET技术,如何将XML与OBJECT进行相互转换(泛型以及通用方法)

对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错.它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成.比哥一年前写的那个牛多了,哈哈,哥去年乱写了个网页版的(http://www.cnblogs.com/jasenkin/archive/2010/02/11/1667511.html),现在看一年前的代码,哥感叹,这个谁写的代码,TMD实在写的太烂了!!!当然,ORMCodeHel

XML 命名空间提供了一种避免元素命名冲突的方法

XML 命名空间提供了一种避免元素命名冲突的方法. -------------------------------------------------------------------------------- 命名冲突因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生.而这种情况又往往会导致命名冲突.请看下面两个例子 这个 XML 文档在table元素中携带了水果的信息: ApplesBananas这个 XML 文档在table元

构建基于Web/XML的信息集成研究

摘要 在当前的网络信息时代,信息量不仅庞大而且源自于不同的数据源,信息集成一直是研究的热点.基于多代理(Multi-Agent)的信息资源集成方案有所不足,而XML集成机制的优点,适于网络环境下基于XML的信息集成.本方案:包括系统的总体框图.层次结构.工作过程及信息系统主要部分的具体设计. 关键词 XML,资源集成,DTD,XSL, Wrapper,DOM. 引言 随着计算机技术,特别是Internet的不断发展,实现"信息孤岛"之间的集成与交互成为亟待解决的问题. 在诸多解决方案中

C#操作XML通用方法汇总_C#教程

 在.net的项目开发中,经常会对XML文件进行操作,由于XML文件可以实现跨平台传输,较多的应用在数据传输中,特总结以下几种常用的XML操作方法: 1.创建XML文档: /// <summary> /// 创建XML文档 /// </summary> /// <param name="name">根节点名称</param> /// <param name="type">根节点的一个属性值</para

手动装配Spring与Webwork配置的问题研究 高手进(修改spring-xwork-integration.jar方法实现)

问题描述 手动装配Spring与Webwork配置修改spring-xwork-integration.jar方法实现永久链接:http://panshunchang.javaeye.com/blog/675464我在网上看到一个spring结合webwork的实例,自己弄了一下,发现老出现一个奇怪的错误按照下面的配置,会出现一个一样的错误严重:Couldnotexecuteactionjava.lang.IllegalStateException:Theapplicationcontextha

Google 研究人员提出防止机器人造反的方法

无数的科幻电影和小说描绘了产生自我意识机器人的起义以及随后的人类的灭绝.今天的机器人距离产生自我意识还很遥远,但对于越来越依赖于人工智能的现代社会,我们至少需要一些措施以防止人工智能工作异常.Google Deep Mind团队和牛津大学的研究人员发表了一篇论文<Safely Interruptible Agents>(PDF)就描述了这样一个机制.研究人员指出,在复杂环境下工作的AI(或叫强化学习代理)的行为表现不可能一直保持最佳,在人类监管下的AI可能需要操作员按下一个红色按钮防止AI继续

《Effective C#中文版:“.NET研究”改善C#程序的50种方法》读书笔记

从去年找工作以来,都没什么时间写博客[找工作的体会:建议以后有自己开公司的IT人一定要找IT专业人员做HR,好多公司的HR并不能真正发掘人才,他们形成了太多的偏见,如在学校期间学不了什么东西.只看学校有多少奖励等.真正钻研技术的人才不会追求虚无的东西],其实这本书我都借了好久,一直没有系统的看,所以趁这两天好好看看,顺便总结了一些要点,给那些需要这方面知识而又没有太多时间的IT人一个快速的学习机会....如果要深入学习,请购买该书. 一.用属性代替可访问的字段 1..NET数据绑定只支持数据绑定