【问题标题】:Deserialization using JsonConvert使用 JsonConvert 反序列化
【发布时间】:2016-03-10 14:50:13
【问题描述】:

我正在尝试编写一个接受 JSON 字符串和类型的方法。该方法的目的是反序列化类型指定的对象中的字符串。我希望代码如下所示

public dynamic Deserialize(string serializedStr, Type type) {
      return JsonConvert.Deserialize<type>(serializedStr);
 }

是否可以使用 Newtonsoft.JSon 进行这样的操作?

【问题讨论】:

    标签: c# .net json deserialization json-deserialization


    【解决方案1】:

    你所要做的就是:

    public dynamic Deserialize(string serializedStr, Type type)
    {
        return JsonConvert.DeserializeObject(serializedStr, type);
    }
    

    【讨论】:

      【解决方案2】:

      创建一个像这样的通用方法:

      public T DeserializeObject<T>(string serializedStr)
      {
          return JsonConvert.DeserializeObject<T>(serializedStr);
      }
      

      【讨论】:

      • 他似乎只有 Type 实例。这意味着他只能使用使用反射的通用方法。另外,为什么不直接调用Json方法呢?
      【解决方案3】:

      这里有一个帮助扩展方法静态类的小例子,为双方服务(如果进入 prod,需要范围界定等):

      public static class JsonHelpers
      {
          public static T DeserializeObject<T>(this string jsonString)
          {
              try
              {
                  var concreteObject = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonString);
                  return concreteObject;
              }
              catch
              {
                  return default(T);
              }
          }
          public static string SerializeObject<T>(this T concreteObject)
          {
              try
              {
                  var jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(concreteObject);
                  return jsonString;
              }
              catch
              {
                  return null;
              }
          }
      }
      

      用法:

      var jsonString = yourclass.SerializeObject();

      var classObject = serialisedString.DeserializeObject&lt;yourClass&gt;();

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多