【问题标题】:How to achieve dynamic partial XML class serialization in .Net?如何在.Net中实现动态部分XML类序列化?
【发布时间】:2013-06-05 19:57:49
【问题描述】:

我很想使用默认的 .Net xml 序列化程序将我的数据保存为简单的 xml 格式。我在运行时有一个enum MemberCode { feild1 = 1, feild2 = 2 /*...*/} 我生成了一个List<MemberCode> 我想保存到xml 中的成员(有时更多有时更少)。

如何实现这样的部分类序列化?

【问题讨论】:

  • 你的意思是XmlIgnore?,取决于类的大小,序列化可能不是要走的路,自己写一个序列化器可能更容易
  • 可能,但请注意我的列表是在运行时生成的。
  • 你可以编写一个自定义的序列化方法,以列表为参数

标签: c# .net serialization attributes xml-serialization


【解决方案1】:

下面的代码可能会解决您的问题。

我们创建了一个名为 MemberList 的可序列化类,其中包含一个 MemberCode 数组。在运行时填充您的成员代码列表后,我们将其转换为数组并将其序列化为 XML。结果将保存到调试文件夹中名为“test.xml”的文件中。

XML 输出

<?xml version="1.0" encoding="utf-8"?>
    <MemberList xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <Members>
        <Member>Field1</Member>
        <Member>Field2</Member>
        <Member>Field3</Member>
        <Member>Field2</Member>
        <Member>Field1</Member>
        <Member>field4</Member>
      </Members>
    </MemberList>

代码:

using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;

namespace ConsoleApplication1
{
    public class Program
    {
        static void Main(string[] args)
        {
            // Your member code list
            List<MemberCode> list = new List<MemberCode>();

            // Add some members to the list during runtime (replace with your logic)
            list.Add(MemberCode.Field1);
            list.Add(MemberCode.Field2);
            list.Add(MemberCode.Field3);
            list.Add(MemberCode.Field2);
            list.Add(MemberCode.Field1);
            list.Add(MemberCode.field4);

            // Create a new serializable member list
            MemberList memberList = new MemberList();
            // Convert your list to a serializable array
            memberList.MemberCode = list.ToArray();

            // Write the XML to a file
            XmlSerializer serializer = new XmlSerializer(typeof(MemberList));
            TextWriter writer = new StreamWriter("test.xml");
            serializer.Serialize(writer, memberList);

            Console.ReadLine();
        }
    }

    [XmlRoot]
    public class MemberList
    {
        [XmlArray("Members")]
        [XmlArrayItem("Member", typeof(MemberCode))]
        public MemberCode[] MemberCode { get; set; }
    }

    public enum MemberCode
    {
        Field1 = 1,
        Field2 = 2,
        Field3 = 3,
        field4 = 4
    }
}

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2021-11-06
    • 2013-04-04
    • 2012-08-27
    • 2010-12-03
    • 1970-01-01
    • 2011-04-03
    • 2016-04-11
    • 1970-01-01
    相关资源
    最近更新 更多