为什么我的JObject到模型的转换返回null?

时间:2019-01-14 04:47:12

标签: c# arrays json model json.net

我试图将一个非常简单的JObject转换为C#模型对象,但是由于某种原因,我得到的都是null。

对象模型如下

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"
    }
]

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

您的JSON表示对象数组,其中每个对象都包含一个名为toplevelCat的字符串属性。您正在尝试反序列化为包含名为Categories的数组的单个对象。由于您的模型与JSON不匹配,因此无法正常工作。使您的模型像这样:

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

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

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