#c# #arrays #json #deserialization
Вопрос:
Я вижу, что подобные вопросы задавались и раньше. Однако все замечательные примеры, размещенные здесь, немного отличаются от моих. Кажется, я не могу найти пример с массивом Json, который выглядит так, как этот, и я попробовал по крайней мере 2 десятка примеров и каждый тип кода десериализации, который будет компилироваться, но, что бы я ни пытался, я не могу заставить это работать. Любая помощь будет признательна.
Вот мой Json, который возвращается.
{"Value": [
{
"BirthSexId": 1,
"BloodTypeVerificationPending": false,
"CenterPatientId": "80671472",
"DateOfBirth": "1970-02-16T00:00:00",
"EthnicityRace": [
1048576
],
"FirstName": "Candidate",
"HasParentRegistration": false,
"LastName": "323820260",
"ListingCenterCode": "HHHH",
"ListingCenterType": "TX1",
"ListingDateUsedByMatchUtc": "2011-01-21T19:17:26.04Z",
"MedicalUrgencyStatusId": 4099,
"RegistrationAddDateUtc": "2011-01-21T19:17:26.667Z",
"RegistrationId": 681292,
"RegistrationInactiveReasonId": 7,
"RegistrationOrganCode": "KI",
"Removed": false,
"SocialSecurityNumber": "323820260",
"VerifiedBloodTypeCode": "A"
},
{
"BirthSexId": 2,
"BloodTypeVerificationPending": false,
"CenterPatientId": "72240245",
"DateOfBirth": "1974-04-17T00:00:00",
"EthnicityRace": [
33554432
],
"FirstName": "Candidate",
"HasParentRegistration": false,
"LastName": "322823847",
"ListingCenterCode": "HHHH",
"ListingCenterType": "TX1",
"ListingDateUsedByMatchUtc": "2019-07-01T21:13:28.61Z",
"MedicalUrgencyStatusId": 4010,
"RegistrationAddDateUtc": "2019-07-01T21:13:28.693Z",
"RegistrationId": 1203041,
"RegistrationOrganCode": "KI",
"Removed": false,
"SocialSecurityNumber": "322823847",
"VerifiedBloodTypeCode": "A"
}
],
"ValidationResults": [] }
Вот мой класс C#
public class UnosRegistration
{
public Int32 BirthSexId { get; set; }
public Boolean BloodTypeVerificationPending { get; set; }
public String CenterPatientId { get; set; }
public String DateOfBirth { get; set; }
public Int32[] EthnicityRace { get; set; }
public String FirstName { get; set; }
public Boolean HasParentRegistration { get; set; }
public String LastName { get; set; }
public String ListingCenterCode { get; set; }
public String ListingCenterType { get; set; }
public String ListingDateUsedByMatchUtc { get; set; }
public Int32 MedicalUrgencyStatusId { get; set; }
public String RegistrationAddDateUtc { get; set; }
public Int32 RegistrationId { get; set; }
public Int32 RegistrationInactiveReasonId { get; set; }
public String RegistrationOrganCode { get; set; }
public Boolean Removed { get; set; }
public String SocialSecurityNumber { get; set; }
public String VerifiedBloodTypeCode { get; set; }
}
Вот мой фрагмент кода на C#
response = (HttpWebResponse)myWebRequest.GetResponse();
dynamic responseString;
responseString = new StreamReader( response.GetResponseStream() ).ReadToEnd();
List<UnosRegistration> jsonResult = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize( responseString, typeof( List<UnosRegistration> ) );
var RegID = jsonResult.FirstOrDefault().RegistrationId;
Спасибо вам за вашу помощь.
Ответ №1:
Обратите внимание, что в вашем JSON есть Value
ключ, содержащий массив из UnosRegistration
. Указание вашему коду десериализовать a List
of UnosRegistration
не будет работать, так как десериализатор будет искать массив на верхнем уровне вашего JSON, а его там нет.
Для решения этой проблемы вам понадобится класс-оболочка, этот класс будет содержать List<UnosRegistration>
свойство, называемое Value
так:
public class Wrapper
{
public List<UnosRegistration> Value { get; set; }
}
Затем вы десериализуетесь вот так
Wrapper jsonResult = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<Wrapper>(responseString);
Комментарии:
1. О, Большое Вам Спасибо!