首页 > 解决方案 > 为什么我的 JObject 到模型转换返回 null?

问题描述

我正在尝试将一个非常简单的 JObject 转换为 C# 模型对象,但由于某种原因,我得到的只是空值。

对象模型如下所示

public class PerfectFit
{
    public Array Categories { get; set; }
}

转换器也像这样简单

public static PerfectFit PerfectFitTopLevelFormat(IQueryable<JObject> unformattedQueryOutput)
{

    //var jongel = unformattedQueryOutput.ToList();


    PerfectFit formattedQueryOuput = Newtonsoft.Json.JsonConvert.DeserializeObject<PerfectFit>(unformattedQueryOutput.ToList().ToString());


    return formattedQueryOuput;
}

我正在调用这样的转换器方法

PerfectFit formattedQueryOutput = ReFormatQueryOutput.PerfectFitTopLevelFormat(queryResultSet);
return Ok(formattedQueryOutput);

queryResultSet 检索如下

IQueryable<JObject> queryResultSet = client.CreateDocumentQuery<JObject>(UriFactory.CreateDocumentCollectionUri(brandDbInfo.DbName, brandDbInfo.DbCollection), queryElementInfo.SqlStatement, queryOptions);

如果我只是返回 queryResultSet.ToList(); 我得到以下

[
    {
        "topLevelCat": "Barn"
    },
    {
        "topLevelCat": "Dam"
    },
    {
        "topLevelCat": "Herr"
    },
    {
        "topLevelCat": "Divided"
    }
]

所以我知道数据可以从我的数据源中很好地返回,但我无法将转换为我的简单模型工作。

我在这里想念什么?

标签: c#arraysjsonmodeljson.net

解决方案


您的 JSON 表示一个对象数组,其中每个对象都包含一个名为toplevelCat. 您正试图反序列化为一个包含名为Categories. 由于您的模型与 JSON 不匹配,因此无法正常工作。让你的模型像这样:

public class PerfectFit
{
    public string TopLevelCat { get; set; } 
}

List<PerfectFit>您可以像这样从 JSON 字符串反序列化为:

List<PerfectFit> list = JsonConvert.DeserializeObject<List<PerfectFit>>(json);

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

如果你从一个开始,IQueryable<JObject>你应该能够做这样的事情:

List<PerfectFit> list = queryResultSet.ToList()
    .Select(jo => jo.ToObject<PerfectFit>()).ToList();

小提琴:https ://dotnetfiddle.net/5JS1gX


推荐阅读