`
bluedusk
  • 浏览: 270114 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

C#的XML序列化和反序列化4

    博客分类:
  • .Net
阅读更多

    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 string Class
        { set; get; }
        [XmlElement("NUMBER")]
        public int Number
        { set; get; }
    }

void Main(string[] args)

{

            Student stu = new Student()
            {
                Age = 10,
                Class = "Class One",
                Name = "Tom",
                Number = 1
            };
            XmlSerializer ser = new XmlSerializer(typeof(Student));
            ser.Serialize(File.Create("C:\\x.xml"), stu);

}

反序列化对象

            XmlSerializer ser = new XmlSerializer(typeof(Student));
            Student stu = ser.Deserialize(File.OpenRead("C:\\x.xml")) as Student;

对象数组序列化

    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 string Class
        { set; get; }
        [XmlElement("NUMBER")]
        public int Number
        { set; get; }
    }

void Main(string[] args)

{

            List<Student> stuList = new List<Student>();
            stuList.Add(new Student() { Age = 10, Number = 1, Name = "Tom", Class = "Class One" });
            stuList.Add(new Student() { Age = 11, Number = 2, Name = "Jay", Class = "Class Two" });
            stuList.Add(new Student() { Age = 12, Number = 3, Name = "Pet", Class = "Class One" });
            stuList.Add(new Student() { Age = 13, Number = 4, Name = "May", Class = "Class Three" });
            stuList.Add(new Student() { Age = 14, Number = 5, Name = "Soy", Class = "Class Two" });
            XmlSerializer ser = new XmlSerializer(typeof(List<Student>));
            ser.Serialize(File.Create("C:\\x.xml"), stuList);

}

对象数组反序列

            XmlSerializer ser = new XmlSerializer(typeof(List<Student>));
            List<Student> stuList = ser.Deserialize(File.OpenRead("C:\\x.xml")) as List<Student>;
            foreach (Student s in stuList)
            {
                MessageBox.Show(string.Format("{0} : {1} : {2} : {3}",
                    s.Name, s.Age, s.Class, s.Number));
            }

序列化Dirctionary

    public struct DirectionList
    {
        [XmlAttribute("Name")]
        public string Name;
        [XmlElement("Value")]
        public int Value;
    }

void Main(string[] args)

{

            Dictionary<string, int> list = new Dictionary<string, int>();
            list.Add("1", 100);
            list.Add("2", 200);
            list.Add("3", 300);
            list.Add("4", 400);
            list.Add("5", 500);
            list.Add("6", 600);
            list.Add("7", 700);
            list.Add("8", 800);
            list.Add("9", 900);

            List<DirectionList> dirList = new List<DirectionList>();
            foreach (var s in list)
            {
                dirList.Add(new DirectionList() { Name = s.Key, Value = s.Value });
            }
            XmlSerializer ser = new XmlSerializer(typeof(List<DirectionList>));
            ser.Serialize(File.Create("C:\\x.xml"), dirList);

}

这里还要讲一点,在XmlSerializer中,不支持Dirctionary<>类型的对象,所以在序列化这种最常见类型的时候, 只能按照它的格式先创建一个可以别序列化的类型,这里我定义了一个结构体,当然你也可以定义成其他的类。将Dictionary<>中的数据 依次放进结构体以后就可以放入流中了。

[XmlAttribute("Name")]意思是将这个字段作为xml的属性,属性名跟在“”中

[XmlElement("Value")]意思是将这个字段做为xml的元素。


反序列化Dirctionary


            XmlSerializer ser = new XmlSerializer(typeof(List<DirectionList>));
            List<DirectionList> dirList = ser.Deserialize(
                File.OpenRead("C:\\x.xml")) as List<DirectionList>;
            foreach (var v in dirList)
            {
                Console.WriteLine("{0} : {1}", v.Name, v.Value);
            }

其实我并不喜欢这个名称,感觉有点生化危机的feel,但是也就是这样了,没有太炫的地方,Deserialize反序列化。真希望.Net能集成Dirctionary<>对象,那我们这些懒人就方便了。

在需要序列化的队伍中,数组是很常见的类型,其次就是图片了

序列化图片

    public struct ImageStruct
    {
        [XmlAttribute("Number")]
        public int number;
        [XmlElement("Image")]
        public byte[] picture;
    }

void Main(string[] args)

{

            ImageStruct s = new ImageStruct() { number = 1, picture = File.ReadAllBytes(@"11.jpg") };
            XmlSerializer ser = new XmlSerializer(typeof(ImageStruct));
            FileStream fs = File.Create("c:\\x.xml");
            ser.Serialize(fs, s);
            fs.Close();

}

一样的,采用结构体来保存图片,这里我还加了个图片的名字,到时候查找起来也方便一些

图片反序列化

            XmlSerializer ser = new XmlSerializer(typeof(ImageStruct));
            ImageStruct s = (ImageStruct)ser.Deserialize(File.OpenRead("c:\\x.xml"));
            pictureBox1.Image = Image.FromStream(new MemoryStream(s.picture));

没有花头的方式,利用memorystream来做缓存,这样会比较快一点,实际上我并没有怎么感觉。

图片数组序列化

    public struct ImageStruct
    {
        [XmlAttribute("Number")]
        public int number;
        [XmlElement("Image")]
        public byte[] picture;
    }

void Main(string[] args)

{

            List<ImageStruct> imageList = new List<ImageStruct>();
            imageList.Add(new ImageStruct()
            {
                number = 1,
                picture = File.ReadAllBytes(@"11.jpg")
            });
            imageList.Add(new ImageStruct()
            {
                number = 2,
                picture = File.ReadAllBytes(@"22.jpg")
            });

            XmlSerializer ser = new XmlSerializer(typeof(List<ImageStruct>));
            FileStream fs = File.Create("c:\\x.xml");
            ser.Serialize(fs, imageList);
            fs.Close();

}

图片数组反序列化

            XmlSerializer ser = new XmlSerializer(typeof(List<ImageStruct>));
            List<ImageStruct> s = (List<ImageStruct>)ser.Deserialize(File.OpenRead("c:\\x.xml"));
            var im = from i in s
                     where i.number == 1
                     select i.picture;

            //var im = s.Where(p => p.number == 1).Select(p => p.picture);
            foreach (var image in im)
            {
                pictureBox1.Image = Image.FromStream(
                    new MemoryStream(image));
            }

这里还对数组结构进行了Linq查询,这样就可以很方便的查询图片了。

分享到:
评论

相关推荐

    C#序列化与反序列化(包括复杂xml对象)

    本文将深入探讨C#中的XML序列化和反序列化技术,包括如何将XML文档解析为对象,以及如何将对象转换回XML文档进行存储。我们将详细讲解三种方法,涵盖从XML节点获取键值对(KV值)到处理对象数组和节点标签组合的反...

    XML序列化与反序列化 实战

    总的来说,这个实战项目提供了XML序列化和反序列化的实用工具,帮助开发者更高效地处理XML数据和C#对象之间的转换。通过理解和使用提供的代码,你可以深入了解XML序列化的工作原理,并将其应用到自己的项目中。

    C# xml序列化和反序列化

    在C#编程中,XML序列化和反序列化是一项重要的技术,它允许我们将对象的状态转换为XML格式的数据,以及将XML数据恢复为等效的对象。这在数据存储、网络传输和配置文件等方面都有广泛的应用。以下是对这个主题的详细...

    C#JSon XML序列化与反序列化工具

    总结来说,理解和掌握C#中的JSON和XML序列化与反序列化是每个.NET开发者必备的技能。自制的解析工具不仅提升了工作效率,也使得数据处理更加灵活和便捷。无论是`System.Text.Json`还是Newtonsoft.Json,或是`System....

    C# 实现序列化,反序列化XML文件 各种类型 万能

    在C#中,我们可以使用`System.Xml.Serialization`命名空间中的`XmlSerializer`类来实现XML序列化。序列化过程通常包括以下步骤: 1. 定义要序列化的类:在类中添加`[Serializable]`属性或者使用`[XmlRoot]`、`...

    C#中Font和Color的Xml序列化

    在本文中,我们将探讨如何通过自定义方式实现Font和Color在XML序列化中的应用。 首先,让我们了解什么是Font和Color。Font对象在C#中代表了文本的外观,包括字体名称、大小、样式(如粗体、斜体)等属性。而Color...

    C# 各种序列化和反序列化

    在C#中,我们可以使用System.Xml.Serialization命名空间中的XmlSerializer类来实现XML序列化和反序列化。通过创建一个XmlSerializer实例,指定要序列化的类型,然后调用其Serialize方法,即可将对象转换为XML字符串...

    C#序列化和反序列化案例.rar

    最常用的序列化类型包括XML序列化(XmlSerializer)、JSON序列化(JavaScriptSerializer或Newtonsoft.Json库)和二进制序列化(BinaryFormatter)。在这个案例中,可能是通过BinaryFormatter或XmlSerializer将对象的...

    c#操作xml和序列化

    3. **XML序列化和反序列化**: C#提供了XmlSerializer类来实现对象到XML和XML到对象的转换。这在保存和加载对象状态时非常有用。 ```csharp [Serializable] public class MyObject { public string Name { get;...

    Xml反序列化

    1. **创建一个XML序列化类**:首先,我们需要定义一个类,该类的属性与XML文件中的元素相对应。例如,如果XML文件包含电源配置信息,可能有一个类名为`PowerConfig`,其中包含如`Voltage`、`Current`和`Frequency`等...

    xml序列化和反序列化 c#

    XML序列化和反序列化是C#编程中处理数据存储和传输的重要技术。XML(Extensible Markup Language)是一种用于标记数据的语言,具有良好的可读性和跨平台性,使其成为网络数据交换的理想选择。C#提供了内置的支持来...

    XmlDemoTranfer Xml序列化与反序列化

    `XmlSerializer`是C#中用于处理XML序列化和反序列化的关键类。要序列化一个对象,你需要创建一个`XmlSerializer`实例,指定要序列化的类型,然后调用`Serialize`方法,将对象写入一个文本流或文件。反序列化则通过...

    C#中以PLCOpen为例子的XML序列化,反序列化的代码

    总的来说,XML序列化和反序列化是C#中处理数据交换和持久化的重要工具。它们简化了与XML格式的数据交互,并能方便地应用到PLCOpen或其他任何基于XML的规范或标准中。通过理解并熟练掌握这一技术,开发者可以更高效地...

    C#序列化和反序列化XML-读取word

    本篇将深入探讨如何使用C#进行XML序列化和反序列化,并且特别关注如何读取Word文档中的XML内容。 XML序列化是将对象的属性和字段转换为XML文档的过程,而反序列化则是相反的过程,即将XML数据转换回对象。这对于...

    XML序列化与反序列化整理文档(12套)

    XML(eXtensible Markup ...通过理解和熟练掌握XML序列化与反序列化,开发者可以有效地在不同的系统和组件之间传递数据,从而提升软件的灵活性和互操作性。所提供的文档和代码实例是深入学习和实践这一技术的好资源。

    C#对象序列化与反序列化

    XML序列化不会保存完整的类型名称或程序集信息,这使得XML数据更具开放性和互操作性。 ##### (3) 使用特性对序列化的控制 - **`[Serializable]`**:表示该类型支持序列化。 - **`[NonSerialized]`**:表示该字段不...

    c#对象序列化与反序列化实例

    C#提供了`System.Xml.Serialization.XmlSerializer`类来处理XML序列化和反序列化。 ```csharp [XmlRoot("Person")] public class Person { [XmlElement("Name")] public string Name { get; set; } [XmlElement...

    C#和Java的序列化反序列化

    C#的XML序列化允许我们控制哪些字段和属性参与序列化,可以通过添加`[XmlElement]`、`[XmlAttribute]`等特性来指定。此外,C#还提供了JSON序列化库如Newtonsoft.Json(Json.NET),它在Web应用中广泛应用,支持更...

    C#序列化和反序列化

    C#提供了多种序列化方法,其中最常见的包括BinaryFormatter、SoapFormatter和XML序列化。接下来我们将详细探讨这三种方法。 1. **BinaryFormatter**: BinaryFormatter是.NET框架中最基本的序列化工具,它将对象...

Global site tag (gtag.js) - Google Analytics