如何将包含不同数据类型的JSON数组反序列化为单个对象

迈克尔·哈特曼

在过去的几天中,我一直在研究如何反序列化对C#对象的JSON响应。JSON有效,但我无法将任何JSON转换为C#转换器。我也找不到适用于此实例的Stackoverflow的答案。JSON响应为:

[
  {
    "SEX": "Male",
    "BREED": "Opifex",
    "PVPRATING": 1301,
    "NAME": "Kilmanagh",
    "FIRSTNAME": "Big",
    "PVPTITLE": "Freshman",
    "LASTNAME": "Kahuna",
    "CHAR_DIMENSION": 5,
    "ALIENLEVEL": 30,
    "RANK_name": "Vindicator",
    "HEADID": 40281,
    "PROFNAME": "Guru",
    "LEVELX": 220,
    "PROF": "Martial Artist",
    "CHAR_INSTANCE": 12734,
    "SIDE": "Omni"
  },
  {
    "ORG_DIMENSION": 5,
    "RANK_TITLE": "President",
    "ORG_INSTANCE": 9911,
    "NAME": "Elements of Destruction",
    "RANK": 0
  },
  "2016/04/06 08:37:26"
]

根据我的检查,它是一个包含两个对象和一个字符串的数组。我使用以下方法尝试将其转换为对象:

 resultArray = JsonConvert.DeserializeObject<List<JsonWhoisResult>>(data);
 and
 result = JsonConvert.DeserializeObject<JsonWhoisResult>(data);

无论哪种方式,我都会得到一个错误:

转换值...(片段)... [ConsoleApplication6.JsonWhoisResult]时出错。路径'',第1行,位置536。

我不知道对象是否错误,或者我是否为此JSON格式使用了错误的代码。我在用:

public class JsonWhoisResult
{
    public stats stats { get; set; }
    public header header { get; set; }
    public string datetime { get; set; }
}

public class header
{
    public int ORG_DIMENSION { get; set; }
    public string RANK_TITLE { get; set; }
    public int ORG_INSTANCE { get; set; }
    public string NAME { get; set; }
    public int RANK { get; set; }
}

public class stats
{
    public string SEX { get; set; }
    public string BREED { get; set; }
    public int PVPRATING { get; set; }
    public string NAME { get; set; }
    public string FIRSTNAME { get; set; }
    public string PVPTITLE { get; set; }
    public string LASTNAME { get; set; }
    public int CHAR_DIMENSION { get; set; }
    public int ALIENLEVEL { get; set; }
    public string RANK_name { get; set; }
    public int HEADID { get; set; }
    public string PROFNAME { get; set; }
    public int LEVELX { get; set; }
    public string PROF { get; set; }
    public int CHAR_INSTANCE { get; set; }
    public string SIDE { get; set; }
}

如果有人有任何解决方案,我将不胜感激。我还有其他几种使用这种类型的样式。如果我能找到解决方案,那么我应该可以将其应用于其余的解决方案。

布莱恩·罗杰斯(Brian Rogers)

由于您的JSON是一个数组,因此您无法将其反序列化为一个单一JsonWhoisResult的数组,并且由于您的数组包含不同的对象类型,因此您无法直接将其反序列化为List<JsonWhoisResult>您将需要自定义JsonConverter处理这种情况。转换器可以使用Json.Net的LINQ-to-JSON API反序列化JSON,然后将每个项目手动提取到其适当的对象类型中,并JsonWhoisResult根据需要填充一个这样的事情应该起作用:

class JsonWhoisResultConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return (objectType == typeof(JsonWhoisResult));
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        JArray array = JArray.Load(reader);
        JsonWhoisResult result = new JsonWhoisResult();
        result.stats = array[0].ToObject<stats>();
        result.header = array[1].ToObject<header>();
        result.datetime = array[2].ToString();
        return result;
    }

    public override bool CanWrite
    {
        get { return false; }
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

然后像这样使用它:

JsonWhoisResult result = JsonConvert.DeserializeObject<JsonWhoisResult>(json, new JsonWhoisResultConverter());

小提琴:https : //dotnetfiddle.net/d1hkCn

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将JSON对象数组反序列化为C#匿名类型?

将 json 反序列化为 pojo,其中 json 字段具有不同的数据类型

如何将xml中的数组反序列化为没有类型属性的不同对象类型?

如何将包含具有单个属性名称和值的对象数组的JSON反序列化为ac#模型?

如何将数组反序列化为包装对象?

使用Jackson将反序列化JSON数组反序列化为单个Java对象

如何将 JSON 反序列化为通用对象并根据 JSON 中的数据结构获取适当的类型?

如何将JSON反序列化为.net对象

如何将 JSON 对象反序列化为 DataTable

如何将Json反序列化为对象?

如何将 JSON 嵌套对象数组反序列化为 C# 对象

如何将JSON字符串反序列化为不同的复杂类类型?

如何将具有不同值的相同 JSON 对象反序列化为 Java 类

将json反序列化为pojo,其中json字段具有不同的数据类型C#

如何将多个对象序列化/反序列化为单个XML文件?

如何将嵌套的 JSON 数据反序列化为扁平对象?

如何将JSON数组反序列化为本地.net数据结构?

Java Jackson将纯Json数组或Json对象反序列化为单个Java对象(POJO)

如何将数组序列化为json对象?

JsonPath / Jackson:如何将JSON数组反序列化为单个对象(“ [1,2,3]”-> Vector3d实例)?

如何将 JSON 对象反序列化为字典,其值可以是单个字符串或字符串数组?

将JSON反序列化为多种数据类型(地理空间系统)

如何将JSON字典序列化/反序列化为数组

无法将当前 JSON 对象反序列化为类型,因为该类型需要 JSON 数组

Jackson,将普通 JSON 数组反序列化为单个 Java 对象

“无法将当前JSON对象反序列化为类型

如何将 HttpClient 结果从数组数组反序列化为对象列表

如何将JObject反序列化为.NET对象

如何将内部 XML 反序列化为对象?