前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在c#中,如何序列化/反序列化一个字典对象?

在c#中,如何序列化/反序列化一个字典对象?

作者头像
程序你好
发布2018-08-21 15:35:51
3K0
发布2018-08-21 15:35:51
举报
文章被收录于专栏:程序你好程序你好

.Net提供的各种序列化的类,通过使用这些类,. Net对象的序列化和反序列化变得很容易。但是字典对象的序列化并不是那么容易。为此,您必须创建一个能够序列化自身的特殊Dictionary类。在不同的业务案例中,序列化技术可能不同。

今天,让我们通过一个示例讨论如何实现序列化/反序列化。代码在文章中共享,您可以在应用程序中使用。继续阅读,如果你有其他方法,请告诉我。

要序列化dictionary对象,首先需要创建一个自定义dictionary类,实现IXmlSerializable接口。该接口包含三个方法,分别是GetSchema、ReadXml、WriteXml。您需要在这些方法中实现逻辑。以下是完整的代码供您参考:

代码语言:javascript
复制
        [XmlRoot("Languages")]        
        public class LanguageSettings<TKey, TValue> : Dictionary<TKey, TValue>, 
                                                      IXmlSerializable
        {
            public XmlSchema GetSchema() { return null; }
        
            public void ReadXml(XmlReader reader)
            {
                if(reader.IsEmptyElement) { return; }
        
                reader.Read();
                while (reader.NodeType != XmlNodeType.EndElement)
                {
                    object key = reader.GetAttribute("Title");
                    object value = reader.GetAttribute("Value");
                    this.Add((TKey)key, (TValue)value);
                    reader.Read();
                }
            }
        
            public void WriteXml(XmlWriter writer)
            {
                foreach (var key in this.Keys)
                {
                    writer.WriteStartElement("Language");
                    writer.WriteAttributeString("Title", key.ToString());
                    writer.WriteAttributeString("Value", this[key].ToString());
                    writer.WriteEndElement();
                }
            }
        }

在上面的代码片段中,您可以看到我们将对象序列化为XML属性。如果您有不同的业务需求,您可以将其更改为根元素类型。

自定义字典类就绪后,就可以开始将dictionary对象编写为XML文件。下面是用XmlSerializer API实现函数性的逻辑:

代码语言:javascript
复制
            XmlSerializer serializer = new XmlSerializer(typeof(LanguageSettings<string, string>));            
            TextWriter textWriter = new StreamWriter(@"languages.xml");
            serializer.Serialize(textWriter, settings);
            textWriter.Close();

您还可以使用XmlSerializer读取XML并将其反序列化到dictionary对象中。您需要使用TextReader从XML文件中读取输入流。

这里的代码片段:

代码语言:javascript
复制
            XmlSerializer serializer = new XmlSerializer(typeof(LanguageSettings<string, string>));            
            TextReader textReader = new StreamReader(@"languages.xml");
            LanguageSettings<string, string> settings = 
                              (LanguageSettings<string, string>)serializer.Deserialize(textReader);
            textReader.Close();

我希望这篇文章很有用,并且您可以直接使用项目中的共享代码片段将Dictionary对象序列化/反序列化到/从XML文件。请在下面的评论部分分享你对这篇文章的反馈。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档