如果你用 Json.NET 的话,那就非常简单了。


dynamic stuff = JsonConvert.DeserializeObject("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");

string name = stuff.Name;
string address = stuff.Address.City;

除了直接反序列化,你还可以使用 Newtonsoft.Json.Linq ,参考如下代码:


dynamic stuff = JObject.Parse("{ 'Name': 'Jon Smith', 'Address': { 'City': 'New York', 'State': 'NY' }, 'Age': 42 }");

string name = stuff.Name;
string address = stuff.Address.City;

更多详细内容,参见:http://www.newtonsoft.com/json/help/html/QueryJsonDynamic.htm

RoJaIt

我使用 http://json2csharp.com/ 生成了一个表示 json 结构的类。

input:

{
   "name":"John",
   "age":31,
   "city":"New York",
   "Childs":[
      {
         "name":"Jim",
         "age":11
      },
      {
         "name":"Tim",
         "age":9
      }
   ]
}

Output:

public class Child
{
    public string name { getset; }
    public int age { getset; }
}

public class Person
{
    public string name { getset; }
    public int age { getset; }
    public string city { getset; }
    public List<Child> Childs { getset; }
}

然后我使用 Newtonsoft.Json 去实现反序列化类。


using Newtonsoft.Json;

namespace GitRepositoryCreator.Common
{
    class JObjects
    {
        public static string Get(object p_object)
        {
            return JsonConvert.SerializeObject(p_object);
        }
        internal static T Get<T>(string p_object)
        {
            return JsonConvert.DeserializeObject<T>(p_object);
        }
    }
}

然后你就可以像下面这样调用了。


Person jsonClass = JObjects.Get<Person>(stringJson);

string stringJson = JObjects.Get(jsonClass);

PS: 如果你的 JSON 变量不是一个有效的C#名,可以用下面的变通方法。


public class Exception
{
   [JsonProperty(PropertyName = "$id")]
   public string id { getset; }
   public object innerException { getset; }
   public string message { getset; }
   public string typeName { getset; }
   public string typeKey { getset; }
   public int errorCode { getset; }
   public int eventId { getset; }
}

果然有 json 的地方就有 Json.NET,这么🐂的功能,我也是在去年才了解到,学习了。

本文分享自微信公众号 - dotNET跨平台(opendotnet)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“ OSC源创计划 ”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文 本来 react + vite 用得好好的,前几天看到几只前端在鼓吹 react + nextjs 合流,说什么 nextjs 也支持 spa。 就试着迁移过去,结果把自己坑得七荤八素,最后组件状态保持直接给我劝退了。 spa 是从 ssr 进化出来,但又和 ssr 完全不同的产物。一小撮前端为了实现 seo 优化,逆向退化出 nextjs。 作为远古人,我需要你们逆向退化吗?是 php 实现不了 ssr 还是 python 实现不了 ssr? 就算 nextjs 比 php 和 python 有优势(如可以和 spa 项目共享一部分界面组件库),也不能把 nextjs 吹得无所不能吧。 这个 nextjs 所谓的 react 的未来,在我看来除了 ssr 简直一无是处。