.Net对象的轻量级字符串序列化

本文关键字:字符串 序列化 轻量级 对象 Net | 更新日期: 2023-09-27 18:00:42

我阅读了在这里找到的几个关于序列化的线程,但它们没有回答我的问题。

我需要一个简单的序列化库,它将反映出用特定属性标记的属性,并将它们的值存储为字符串。所有属性要么是直接字符串,要么可以直接转换为字符串(内置值类型、bool等)。它还应该理解简单的容器(如泛型列表)并序列化这些内容。

我需要对序列化进行控制,以指示要序列化的属性(只有那些用属性修饰的属性),并且我还必须能够指示某些属性被序列化为最后一个属性:在序列化过程中,它们也必须被反序列化为最后的属性。

格式并不重要,只是普通的param1=val1, param2=val2可以,JSON也可以,还有XML,甚至转义或编码的二进制格式。重要的是,我可以把所有的设置放在一个字符串中,我可以很容易地在应用程序中存储和加载。

有什么想法吗?

.Net对象的轻量级字符串序列化

DataContractSerializer会这样做-您装饰要用[DataContract]序列化的类,并且只装饰要用[DataMember]序列化的成员。您还可以通过DataMember属性的Order属性控制序列化的顺序。

DataContractSerializer(DCS)始终将对象序列化为XML,但它使用的XML既可以是带标记的"普通"XML,也可以是更紧凑的二进制格式,这取决于序列化期间传递给它的XmlWriter(以及反序列化期间传递的XmlReader)。另一个选项是XmlSerializer类,它可以让您对生成的XML有更多的控制权(但它没有那么高性能),它有自己的属性来控制序列化。

下面的代码显示了DCS可序列化类型及其序列化的示例:

    [DataContract]
    public class Person
    {
        [DataMember(Order = 1)]
        public string Name;
        [DataMember(Order = 2)]
        public int Age;
        [DataMember(Order = 3)]
        public Address Address;
    }
    [DataContract]
    public class Address
    {
        [DataMember(Order = 1)]
        public string Street;
        [DataMember(Order = 2)]
        public string City;
        [DataMember(Order = 3)]
        public string State;
    }
    public static void Test()
    {
        MemoryStream ms = new MemoryStream();
        XmlWriterSettings ws = new XmlWriterSettings
        {
            Indent = true,
            IndentChars = "  ",
            Encoding = Encoding.UTF8,
        };
        XmlWriter w = XmlWriter.Create(ms, ws);
        DataContractSerializer dcs = new DataContractSerializer(typeof(Person));
        Person person = new Person
        {
            Name = "John",
            Age = 22,
            Address = new Address
            {
                Street = "1 Main St.",
                City = "Springfield",
                State = "ZZ",
            }
        };
        dcs.WriteObject(w, person);
        w.Flush();
        Console.WriteLine("Serialized:");
        Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
        ms.Position = 0;
        XmlReader r = XmlReader.Create(ms);
        Person deserialized = (Person)dcs.ReadObject(r);
        Console.WriteLine(deserialized);
    }

如果JSON可以,请查看JSON.Net:http://json.codeplex.com/

您还可以查看YAX序列化程序:http://www.codeproject.com/KB/XML/yaxlib.aspx