zoukankan      html  css  js  c++  java
  • c# Json Dictionary序列化和反序列化

    说明:Dictionary对象本身不支持序列化和反序列化,需要定义一个继承自Dictionary, IXmlSerializable类的自定义类来实现该功能。感觉完全可以把这样的类封装到C#库中,很具有通用性嘛,至今没有遇到不能用的情况的说,或许出于其他方面的考虑microsoft才没有这么做。

    这里说的是字典的键值是自定义类的情况,其他情况不在讨论范围,所使用的Newtonsoft.Json.dll。

        闲话少说,直接上代码。

    自定义类:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RedisTest.Test
    {
         [Serializable]
        public class TestClass
        {
            public string Name = "";
            public TestClass(string n)
            {
                Name = n;
            }
            public override bool Equals(object obj)
            {
                TestClass other = obj as TestClass;
                if (other == null)
                    return false;
    
                if (!base.GetType().Equals(obj.GetType()))
                    return false;
    
                return (this.Name.Equals(other.Name));
            }
    
            public override int GetHashCode()
            {
                return Name.GetHashCode();
            }
    
            public static explicit operator TestClass(string jsonString)
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<TestClass>(jsonString);
            }
    
            public override string ToString()
            {
                return Newtonsoft.Json.JsonConvert.SerializeObject(this);
            }
    
        }
    }

    测试代表:

    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace RedisTest.Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                Dictionary<TestClass, int> dic = new Dictionary<TestClass, int>();
                TestClass c = new TestClass("c0");
                dic.Add(c, 0);
                TestClass c1 = new TestClass("c1");
                dic.Add(c1, 1);
                TestClass c2 = new TestClass("c2");
                dic.Add(c2, 2);
                TestClass c3 = new TestClass("c3");
                dic.Add(c3, 3);
    
                string json = JsonConvert.SerializeObject(dic, Formatting.Indented);
                Console.WriteLine(json);
                Dictionary<TestClass, int> dic1 = JsonConvert.DeserializeObject<Dictionary<TestClass, int>>(json);
    
            }
        }
    }

     其中重要的是:

            public static explicit operator TestClass(string jsonString)
            {
                return Newtonsoft.Json.JsonConvert.DeserializeObject<TestClass>(jsonString);
            }
    
            public override string ToString()
            {
                return Newtonsoft.Json.JsonConvert.SerializeObject(this);
            }
  • 相关阅读:
    SSH框架总结
    SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
    iBATIS SQL Maps
    深入理解Mybatis中sqlSessionFactory机制原理
    mybatis源码分析(1)——SqlSessionFactory实例的产生过程
    MyBatis常用对象SqlSessionFactory和SqlSession介绍和运用
    Generator生成器函数
    MyBatis学习4---使用MyBatis_Generator生成Dto、Dao、Mapping
    采用图形用户界面的操作系统/应用程序
    图形界面的特点是人们不需要记忆和键入繁琐的命令
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/6184159.html
Copyright © 2011-2022 走看看