我试图将一个非常简单的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"
}
]
所以我知道数据可以从我的数据源中很好地返回,但是我无法将转换成我的简单模型来工作。
我在这里想念什么?
答案 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();