首页 > 解决方案 > 如何制作 JsonConvert.DeserializeObject() 当我不总是将数组传递给它时解析数组?

问题描述

我的 ASP.Net 应用程序中有一个方法,如下所示:

Method1<T>(String inputString)
{
  return JsonConvert.DeserializeObject<T>(inputString);
}

我将字符串化对象传递给Method1,其中一个是该对象的字符串化版本:

obj1: {
  a: ...
  b: [...]
}

IE。obj1是一个具有数组作为属性的对象。现在,按原样,JsonConvert.DeserializeObject<T>(inputString)不会解析该对象的数组部分。我从这篇文章中了解到,如果我做到type1了,我可以完成这项工作。问题是我会将各种不同类型对象的字符串化版本传递给,所以除了使用.obj1JsonConvert.DeserializeObject<type1>(inputString)Method1<T>

有谁知道我该如何解决这个问题?

标签: asp.net.netdeserializationjson-deserializationjsonconvert

解决方案


Newtonsoft.Json.Linqapi 非常适合这种情况。您可以将 json 解析为抽象JToken对象,并查看令牌类型以确定如何提取数组。

public MyType[] GetArrayFromJson(string json)
{
    var token = JToken.Parse(json);

    if (token.Type == JTokenType.Array)
    {
        return token.ToObject<MyType[]>();
    }
    else if(token.Type == JTokenType.Object)
    {
        return token["arrayPropName"].ToObject<MyType[]>();
    }
}

推荐阅读