NewtonSoft JSON反序列化导致仍然序列化的数据

时间:2018-04-04 20:43:28

标签: c# json

我从字符串中的REST API接收GET请求响应。收到后,它看起来像这样:

[
    {\"passport_expiration\": \"2019-09-14\", \"first_name\": \"asdfasdf\", \"last_name\": \"asdfasdf\", \"cass_status\": \"APPROVED\", \"notes\": null, \"kcm_status\": \"DENIED\", \"employment_type\": \"flight_deck\", \"employee_id\": \"10556\", \"passport_id\": \"12341234\"}, 
    {\"passport_expiration\": \"2026-01-04\", \"first_name\": \"asdfasdf\", \"last_name\": \"asdfasdf\", \"cass_status\": \"APPROVED\", \"notes\": null, \"kcm_status\": \"DENIED\", \"employment_type\": \"flight_deck\", \"employee_id\": \"10557\", \"passport_id\": \"12341234\"}, 
    {\"passport_expiration\": \"2026-08-31\", \"first_name\": \"asdfasdf\", \"last_name\": \"MC asdfasdf\", \"cass_status\": \"APPROVED\", \"notes\": null, \"kcm_status\": \"DENIED\", \"employment_type\": \"flight_deck\", \"employee_id\": \"10598\", \"passport_id\": \"12341234\"}
]

当我将其反序列化为动态时:

dynamic dsCrew = JsonConvert.DeserializeObject(responseText);

dsCrew包含:

{[
    {
        "passport_expiration": "2026-08-31",
        "first_name": "asdfasdf",
        "last_name": "MC asdfasdf",
        "cass_status": "APPROVED",
        "notes": null,
        "kcm_status": "DENIED",
        "employment_type": "flight_deck",
        "employee_id": "10598",
        "passport_id": "12341234"
    },
    {
        "passport_expiration": "2026-11-16",
        "first_name": "asdfasdf",
        "last_name": "BLasdf",
        "cass_status": "APPROVED",
        "notes": null,
        "kcm_status": "DENIED",
        "employment_type": "flight_deck",
        "employee_id": "14798",
        "passport_id": "12341234"
    },
    {
        "passport_expiration": "2025-05-05",
        "first_name": "sadfasdf",
        "last_name": "asdf",
        "cass_status": "APPROVED",
        "notes": "",
        "kcm_status": "DENIED",
        "employment_type": "flight_deck",
        "employee_id": "14838",
        "passport_id": "12341234"
    }
]}

它似乎只是简单地删除了转义字符,将一些空值转换为空字符串,并将整个事物包装在另外一组花括号中。这就像它反序列化为一种不同的序列化格式。

在其他SO问题中,答案建议创建一个类以反序列化为:

Deserialised_Crew dsCrew = JsonConvert.DeserializeObject<Deserialised_Crew>(responseText);

但是当我这样做时,我得到一个例外:

  

“无法将当前JSON数组(例如[1,2,3])反序列化为类型'CASS_KCM_Update.Deserialised_Crew',因为该类型需要JSON对象(例如{\”name \“:\”value \“})正确地反序列化。

JsonConvert.DeserializeObject()似乎认为responseText不是有效的JSON。 JSONLint.com说JSON是有效的。

我需要一种方法来引用特定的数据:

dsCrew[0].last_name似乎引用方括号内的整个文本。而且我找不到任何方法来提及任何更具体的特异性。 dsCrew[0][1].last_name无效。 dsCrew[0](1).last_name已经出局了。

我需要一种方法来引用此响应中的名称和employee_id。我对JSON比较陌生。

1 个答案:

答案 0 :(得分:1)

第一个问题可能正是您在调试器中看到的问题。该代码应该没问题。

你的第二个问题只涉及反序列化到一个数组,因为JSON对象是一个数组:

child(uid)

从那时起,您的代码Image应该按预期工作。