zoukankan      html  css  js  c++  java
  • json.net使用说明三

    匿名类型序列化

    首先定义一个匿名对对象,并序列化成Json,用于测试。 如何将这个Josn字符串转换为JSON对象呢?如果先创建一个类的话,那就太累了。
    复制代码
    var o = new
    {
       a = 1,
       b = "Hello, World!",
       c = new[] { 1, 2, 3 },
       d = new Dictionary<string, int> { { "x", 1 }, { "y", 2 } }
    };

    var json = JsonConvert.SerializeObject(o);
    复制代码
     

    第一种做法(匿名类):

    var anonymous = new { a = 0, b = String.Empty, c = new int[0], d = new Dictionary<string, int>() };
    var o2 = JsonConvert.DeserializeAnonymousType(json, anonymous);

    Console.WriteLine(o2.b);
    Console.WriteLine(o2.c[1]);
    第二种做法(匿名类):
    var o3 = JsonConvert.DeserializeAnonymousType(json, new { c = new int[0], d = new Dictionary<string, int>() });
    Console.WriteLine(o3.d["y"]);

        DeserializeAnonymousType 只是借助这个匿名对象参数(anonymous) 反射类型而已,也就是说它和反序列化结果并非同一个对象。正如 o3 那样,我们也可以只提取局部信息。

    第三种做法(索引器):

         实际上,我们也可以直接反序列化为 JObject,然后通过索引器直接访问。JObject、JProperty 等都继承自 JToken,它重载了基元类型转换操作符,我们可以直接得到实际结果。

    var o2 = JsonConvert.DeserializeObject(json) as JObject;

    Console.WriteLine((int)o2["a"]);
    Console.WriteLine((string)o2["b"]);
    Console.WriteLine(o2["c"].Values().Count());
    Console.WriteLine((int)o2["d"]["y"]);
  • 相关阅读:
    TIMESTAMP类型字段在SQL Server和MySQL中的含义和使用
    Redis阻塞诊断基础
    MySQL分区表
    Redis 主从复制
    Redis安全以及备份还原
    Redis物理文件结构
    Redis的Errorlog或者启动日志(错误日志)的配置
    Redis 编译安装
    MySQL自增列锁模式 innodb_autoinc_lock_mode不同参数下性能测试
    SQL Server并发操作单个表时发生在page页面级的死锁
  • 原文地址:https://www.cnblogs.com/LGDD/p/9362990.html
Copyright © 2011-2022 走看看