我是否需要反序列化来自 DocumentDb 的查询结果?

Sam*_*Sam 2 c# asp.net-mvc serialization json azure-cosmosdb

我有一个简单的 POCO 对象,如下所示:

public class Person
{
   public int PersonId {get; set;}
   public string FirstName {get; set;}
   public string MiddleName {get; set;}
   public string LastName {get; set;}
   public char Gender {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

我有以下代码查询我的 DocumentDb 数据库中的 People 集合。

private async static Task<List<Person>> GetPeopleList(string colSelfLink)
{
   dynamic doc = client.CreateDocumentQuery<Document>(colSelfLink, "SELECT p.PersonId, p.FirstName, p.MiddleName, p.LastName, p.Gender FROM People p").AsEnumerable().FirstOrDefault();
   List<Person> peopleList = new List<Person>();
   if (doc != null)
   {
      peopleList = doc;
   }
   return peopleList;
}
Run Code Online (Sandbox Code Playgroud)

当我运行此代码时,出现以下错误:

无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.List`1[MyApp.Person]”,因为该类型需要一个 JSON 数组(例如 [1,2, 3]) 正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型)可以从 JSON 对象反序列化的数组或列表)。还可以将 JsonObjectAttribute 添加到类型以强制它从 JSON 对象反序列化。路径“PersonId”,第 1 行,位置 48。

如何将来自我的查询的 JSON 对象转换为 Person 对象?在我的 MVC 应用程序中,模型绑定器做得很好,但它在单独的类库中运行。我应该如何转换这个 JSON 对象?

Sam*_*Sam 6

这就是我所做的并且有效。如果有更好的方法,我会很感激其他答案。

private async static Task<List<Person>> GetPeopleList(string colSelfLink)
{
   dynamic doc = client.CreateDocumentQuery<Document>(colSelfLink, "SELECT p.PersonId, p.FirstName, p.MiddleName, p.LastName, p.Gender FROM People p").AsEnumerable().ToList();
   List<Person> peopleList = new List<Person>();
   if (doc != null)
   {
      Person person;
      foreach(var item in doc)
      {
         person = JsonConvert.DeserializeObject<Person>(item.ToString());
         peopleList.Add(person);
      }
   }
   return peopleList;
}
Run Code Online (Sandbox Code Playgroud)