나는 들어오는 Json 메시지를 직렬화 (그리고 올바르게 역 직렬화)하려고 할 때 끔찍한 시간을 보내고있다. 먼저 들어오는 Json을 POSTMAN을 통해 MVC rest service에 게시합니다. JsonLint를 통해 유효성을 검사했습니다. 주된 문제는 두 개의 하위 배열 인 accounts와 propertyValues가 null로 오는 것입니다. serviceAddresses는 profilePush의 배열 멤버이고 다른 속성은 채워집니다. DataContracts에 모두 넣기 전에 serviceAddresses에 null 값이 발생했습니다. 내가 여기서 무엇을 놓치고 있니?내 JSon에서 하위 배열에 null을 지정하는 이유는 무엇입니까?
------------ 수신 JSON ------------------
{
"userId" : 15,
"firstName" : "Michael",
"lastName" : "Smith",
"email" : "[email protected]",
"deleted" : false,
"serviceAddresses" : [ {
"addressId" : 18,
"address1" : "8401 Lorain Road",
"address2" : "Suite 10A",
"city" : "Newton Falls",
"state" : "OH",
"zip" : "44021",
"deleted" : false,
"accounts" : [],
"propertyAttributes" : {
"attr_name" : "heat_type",
"attr_value" : "Gas",
"attr_name" : "hot_water_heater_type",
"attr_value" : "Gas",
"attr_name" : "rent_own",
"attr_value" : "Own",
"attr_name" : "sq_ft",
"attr_value" : "2000",
"attr_name" : "stove_type",
"attr_value" : "Gas"
}
}
]
}
[HttpPost]
public JsonResult profileInformationPush(profilePush profile)
{
bool bError = false;
string s = JsonConvert.SerializeObject(profile);
profilePush deserializedProfile =
JsonConvert.DeserializeObject<profilePush>(s);
}
------- -이는 "프로필"절차 --------------
{"UserId":15,"FirstName":"Michael","LastName":"Smith","Email":"[email protected]","Deleted":"False","ServiceAdresses":[{"AddressId":18,"Address1":"8401 Lorain Road","Address2":"Suite 10A","City":"Newton Falls","State":"OH","Zip":"44021","Deleted":"False","Accounts":null,"PropertyAttributes":null}]}
--------------Data Contracts ---------------------
[DataContract]
public class accountInfo
{
[DataMember(Name="accountNumber", EmitDefaultValue = false)]
public string AccountNumber { get; set; }
[DataMember(Name="deleted", EmitDefaultValue = false)]
public string Deleted { get; set; }
}
[DataContract]
public class PropertyAttributes
{
[DataMember(Name="attr_name", EmitDefaultValue = false)]
public string Attr_Name { get; set; }
[DataMember(Name="attr_value", EmitDefaultValue = false)]
public string Attr_Value { get; set; }
}
[DataContract]
public class ServiceAddresses
{
[DataMember(Name="addressId", EmitDefaultValue = false)]
public int AddressId { get; set; }
[DataMember(Name="address1", EmitDefaultValue = false)]
public string Address1 { get; set; }
[DataMember(Name="address2", EmitDefaultValue= false)]
public string Address2 { get; set; }
[DataMember(Name="city", EmitDefaultValue = false)]
public string City { get; set; }
[DataMember(Name="state", EmitDefaultValue = false)]
public string State { get; set; }
[DataMember(Name="zip", EmitDefaultValue = false)]
public string Zip { get; set; }
[DataMember(Name="deleted", EmitDefaultValue = false)]
public string Deleted { get; set; }
[DataMember(Name="accounts", EmitDefaultValue = false)]
public accountInfo[] Accounts { get; set; }
[DataMember(Name = "propertyAttributes", EmitDefaultValue = false)]
public PropertyAttributes[] PropertyAttributes { get; set; }
}
[DataContract]
public class profilePush
{
[DataMember(Name="userId", EmitDefaultValue= false)]
public int UserId { get; set; }
[DataMember(Name="firstName", EmitDefaultValue = false)]
public string FirstName { get; set; }
[DataMember(Name="lastName", EmitDefaultValue = false)]
public string LastName { get; set; }
[DataMember(Name="email", EmitDefaultValue = false)]
public string Email { get; set; }
[DataMember(Name="deleted", EmitDefaultValue = false)]
public string Deleted { get; set; }
[DataMember(Name="serviceAddresses", EmitDefaultValue = false)]
public ServiceAddresses[] ServiceAddresses { get; set; }
}
무엇을 소비합니까? 그것은 웹 서비스 또는 다른 종류의 서비스입니까? – Justin
[JSONLint] (http://jsonlint.com/)는 유효성을 검사하지만 중복 된 attr_name 및 attr_value 필드를 모두 거부하고 마지막 필드 만 유지합니다. 이것은 실제로 유효한 JSON이 아닙니다. 이것은'x = 1; x = 2; x = 3;'그리고 나서 3 개의 값 모두를 원합니다. –