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

简介:   对于ORMCodeHelper(Keny的),完全的采用插件式开发,即插即用,个人感觉还是比较爽的,架构不错。它包括了SQL SERVER 2000,SQL SERVER 2005以及ORACLE的相关C#代码的生成。

  对于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()
        {
            List<T> results=new List<T>();
            if (string.IsNullOrEmpty(filePath)||!File.Exists(filePath))
            {
                return results;
            }

            object obj = null;
            try
            {
                XmlSerializerFactory xmlSerializerFactory = new XmlSerializerFactory();
                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://www.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如下:

<?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也可以是对象数组的,这个留给读者自己去验证。

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

目录
相关文章
|
11月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
2216 2
|
11月前
|
监控 Cloud Native 测试技术
.NET技术深度解析:现代企业级开发指南
每日激励:“不要一直责怪过去的自己,他曾经站在雾里也很迷茫”。我是蒋星熠Jaxonic,一名在代码宇宙中探索的极客旅人。从.NET Framework到.NET 8,我深耕跨平台、高性能、云原生开发,践行领域驱动设计与微服务架构,用代码书写技术诗篇。分享架构演进、性能优化与AI融合前沿,助力开发者在二进制星河中逐光前行。关注我,共探技术无限可能!
.NET技术深度解析:现代企业级开发指南
|
安全 IDE Java
重学Java基础篇—Java Object类常用方法深度解析
Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
604 1
|
SQL 小程序 API
如何运用C#.NET技术快速开发一套掌上医院系统?
本方案基于C#.NET技术快速构建掌上医院系统,结合模块化开发理念与医院信息化需求。核心功能涵盖用户端的预约挂号、在线问诊、报告查询等,以及管理端的排班管理和数据统计。采用.NET Core Web API与uni-app实现前后端分离,支持跨平台小程序开发。数据库选用SQL Server 2012,并通过读写分离与索引优化提升性能。部署方案包括Windows Server与负载均衡设计,确保高可用性。同时针对API差异、数据库老化及高并发等问题制定应对措施,保障系统稳定运行。推荐使用Postman、Redgate等工具辅助开发,提升效率与质量。
718 0
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
361 6
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
410 6
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
830 7
|
开发框架 安全 .NET
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱
在数字化时代,.NET 技术凭借跨平台兼容性、丰富的开发工具和框架、高效的性能及强大的安全稳定性,成为软件开发的重要支柱。它不仅加速了应用开发进程,提升了开发质量和可靠性,还促进了创新和业务发展,培养了专业人才和技术社区,为软件开发和数字化转型做出了重要贡献。
469 5
|
机器学习/深度学习 人工智能 物联网
.NET 技术:引领未来开发潮流
.NET 技术以其跨平台兼容性、高效的开发体验、强大的性能表现和安全可靠的架构,成为引领未来开发潮流的重要力量。本文深入探讨了 .NET 的核心优势与特点,及其在企业级应用、移动开发、云计算、人工智能等领域的广泛应用,展示了其卓越的应用价值和未来发展前景。
379 5
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
286 4

热门文章

最新文章

相关课程

更多