【问题标题】:Cannot deserialize the current JSON object (e.g. {“name”:“value”}) into type无法将当前 JSON 对象(例如 {“name”:“value”})反序列化为类型
【发布时间】:2019-09-11 18:45:45
【问题描述】:

我的请求如下所示:

{
  "count": 5,
  "pages": 1,
  "result": [
    {
      "id": "00000000-0000-0000-0000-000000000001",
      "orgId": "00000000-0000-0000-0000-000000000111",
      "userName": "SamPowell",
      "firstName": "Sam",
      "lastName": "Powell",
      "password": "tytrtyrty",
      "token": null,
      "badge": "001",
      "defaultLanguage": "english",
      "supervisorId": "00000000-0000-0000-0000-000000000000",
      "inactive": false,
}]
}

反序列化失败

_users = JsonConvert.DeserializeObject<List<ApplicationUser>>_restResponse.Content);

应用程序用户类缺少“计数”和“页数”

如何将其添加到列表中

我需要从对象结果Assert.IsNotNull(_users[0].userName.Equals("SamPowell")); 中断言类似下面的内容

【问题讨论】:

  • 代码如下:[Then(@"页面默认显示用户数")] public void ThenDefaultNumberOfUsersIsDisplayedOnThePage() { Console.WriteLine("ThenDefaultNumberOfUsersIsDisplayedOnThePage"); Assert.AreEqual(HttpStatusCode.OK, _restResponse.StatusCode); _users = JsonConvert.DeserializeObject>(_restResponse.Content); Console.WriteLine(_users.Count);断言.IsTrue(_users.Count
  • 你能分享你的ApplicationUser类以便我们回答。

标签: c# list deserialization json-deserialization


【解决方案1】:

您的响应显示的是分页结果,因此您的模型需要如下所示:

public class PagedResult<T>
{
    public int count { get; set; }
    public int pages { get; set; }
    public T[] result { get; set; }
}

public class ApplicationUser
{
    public string id { get; set; }
    public string orgId { get; set; }
    public string userName { get; set; }
    public string firstName { get; set; }
    public string lastName { get; set; }
    public string password { get; set; }
    public object token { get; set; }
    public string badge { get; set; }
    public string defaultLanguage { get; set; }
    public string supervisorId { get; set; }
    public bool inactive { get; set; }
}

然后你会像这样反序列化和测试它:

public class Testing
{
    [Test]
    public void Deserialize()
    {
        var page = JsonConvert.DeserializeObject<PagedResult<ApplicationUser>>(json);
        var users = page.result;
        Assert.IsNotNull(users[0].userName.Equals("SamPowell"));
    }    

     private string json = @""; //your json
}

【讨论】:

    【解决方案2】:

    您明确告诉它反序列化为 ApplicationUser 对象类型列表。很明显,您也承认对象 ApplicationUser 具有与 json 字符串不同的属性:

    “应用程序用户类缺少“计数”和“页数”如何将其添加到列表中”

    _users = JsonConvert.DeserializeObject>_restResponse.Content);

    你要么必须

    创建一个包含属性和应用程序用户列表的新类

    (可能是我看到的最有可能的路径,因为您正在编写自动化测试,因此您可能无法担任 mod 类的角色)您需要使用 Newtonsoft 动态对象进行解析,如下所示:

    dynamic d = JObject.Parse("{'count': 5,'pages': 1,'result': [{'id': '00000000-0000-0000-0000-000000000001','orgId': '00000000-0000-0000-0000-000000000111','userName': 'SamPowell','firstName': 'Sam','lastName': 'Powell','password': 'tytrtyrty','token': null,'badge': '001','defaultLanguage': 'english','supervisorId': '00000000-0000-0000-0000-000000000000','inactive': false,}]}");
    
    Console.WriteLine(d.result[0].userName);
    

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 2021-08-10
      • 1970-01-01
      • 1970-01-01
      • 2014-02-16
      • 1970-01-01
      相关资源
      最近更新 更多