Dictionary转Json(序列化)

Dictionary 转json
	 [HttpPost]
        public string GetStudent() {
            Dictionary<string, object> dic = new Dictionary<string, object>();
            List<Student> lst = new List<Student>() {
                new Student() {Id=1,Name="张飞",Age=450,Address="涿郡人",Birther=new DateTime(1992,03,29) },//处理日期需要在实体类中标记
                new Student() {Id=2,Name="赵云",Age=480,Address="常山真定",Birther= DateTime.Now},
                new Student() {Id=3,Name="刘备",Age=500,Address="三国人",Birther= DateTime.Now}
            };
            Dictionary<string, object> dic1 = new Dictionary<string, object>();
            dic1.Add("list", lst);
            dic.Add("status", 200);
            dic.Add("data", dic1);
            dic.Add("page", 8);
            dic.Add("total", 9);
            return JsonConvert.SerializeObject(dic,Formatting.Indented);
        }
  public class Student
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
        public int? Number { get; set; }
        public string Address { get; set; }
        [JsonConverter(typeof(MyDateTimeConverter))] 标记
        public DateTime Birther { get; set; }

    }
    //转成1991-03-29 12-00-00格式
    public class MyDateTimeConverter : DateTimeConverterBase
    {
        private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-dd hh-mm-ss" };

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return dtConverter.ReadJson(reader, objectType, existingValue, serializer);
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            dtConverter.WriteJson(writer, value, serializer);
        }
    }
    //转成1991年03月29日 12时00分00秒格式
    public class MyCnDateTimeConverter : DateTimeConverterBase
    {
        private static IsoDateTimeConverter dtConverter = new IsoDateTimeConverter { DateTimeFormat = "yyyy年MM月d日 hh时mm分ss秒" };

        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            return dtConverter.ReadJson(reader, objectType, existingValue, serializer);
        }

        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
        {
            dtConverter.WriteJson(writer, value, serializer);
        }
    }

返回的json格式

{
  "status": 200,
  "data": {
    "list": [
      {
        "Id": 1,
        "Name": "张飞",
        "Age": 450,
        "Number": null,
        "Address": "涿郡人",
        "Birther": "1992-03-29 12-00-00"
      },
      {
        "Id": 2,
        "Name": "赵云",
        "Age": 480,
        "Number": null,
        "Address": "常山真定",
        "Birther": "2017-08-10 11-28-18"
      },
      {
        "Id": 3,
        "Name": "刘备",
        "Age": 500,
        "Number": null,
        "Address": "三国人",
        "Birther": "2017-08-10 11-28-18"
      }
    ]
  },
  "page": 8,
  "total": 9
}



  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Unity 中,我们可以使用 JsonUtility 类来实现对象的序列化和反序列化。对于 Dictionary 类型的对象,我们可以通过将其换为一个包含键值对的 List 类型对象,然后对 List 类型对象进行序列化和反序列化。 下面是一个示例代码: ```csharp using System.Collections.Generic; using UnityEngine; [System.Serializable] public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, ISerializationCallbackReceiver { [SerializeField] private List<TKey> keys = new List<TKey>(); [SerializeField] private List<TValue> values = new List<TValue>(); // save the dictionary to lists public void OnBeforeSerialize() { keys.Clear(); values.Clear(); foreach (KeyValuePair<TKey, TValue> pair in this) { keys.Add(pair.Key); values.Add(pair.Value); } } // load dictionary from lists public void OnAfterDeserialize() { this.Clear(); for (int i = 0; i < keys.Count; i++) { this.Add(keys[i], values[i]); } } } [System.Serializable] public class MyData { public SerializableDictionary<string, int> myDict = new SerializableDictionary<string, int>(); } public static class JsonHelper { public static string ToJson<T>(T obj) { return JsonUtility.ToJson(obj); } public static T FromJson<T>(string json) { return JsonUtility.FromJson<T>(json); } } public class Example : MonoBehaviour { private MyData data = new MyData(); private void Start() { data.myDict.Add("key1", 1); data.myDict.Add("key2", 2); string json = JsonHelper.ToJson(data); Debug.Log(json); MyData loadedData = JsonHelper.FromJson<MyData>(json); Debug.Log(loadedData.myDict["key1"]); Debug.Log(loadedData.myDict["key2"]); } } ``` 在上面的示例代码中,我们定义了一个 SerializableDictionary 类来实现 Dictionary序列化和反序列化。在 MyData 类中使用了 SerializableDictionary 类型的成员变量 myDict。在 JsonHelper 类中,我们定义了 ToJson 和 FromJson 方法来将对象换为 Json 字符串和从 Json 字符串中加载对象。在 Example 类中,我们创建了一个 MyData 对象,并向其中添加了两个键值对。我们将 MyData 对象换为 Json 字符串并输出到控制台,然后从 Json 字符串中加载了一个新的对象,并输出了其中的两个值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值