我一直在尝试让传入的 Json 消息进行序列化(并正确反序列化)。首先是我通过 POSTMAN 发布到我们的 MVC 休息服务的传入 Json。通过 JsonLint 对其进行验证。主要问题是两个子数组,accounts 和 propertyValues 作为空值传入。serviceAddresses 是 profilePush 的一个数组成员,它的其他属性正在填充。在我将它们全部放入 DataContracts 之前,我得到了 serviceAddresses 的空值。我在这里想念什么?
------------ 传入 JSON ------------------
{
"userId" : 15,
"firstName" : "Michael",
"lastName" : "Smith",
"email" : "msmith@google.org",
"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":"msmith@google.org","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; }
}