我一直在尝试将传入的Json消息序列化(并正确反序列化)。首先是我通过POSTMAN发布到我们的MVC休息服务的传入Json。通过JsonLint验证它。主要问题是两个子数组,accounts和propertyValues都是null。 serviceAddresses是profilePush的数组成员,其他属性正在填充。在我将它们全部转换为DataContracts之前,我获得了serviceAddresses的null值。我在这里缺少什么?
------------传入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; }
}
答案 0 :(得分:0)
问题是这个JSON:
"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"
}
你的结构:
[DataMember(Name = "propertyAttributes", EmitDefaultValue = false)]
public PropertyAttributes[] PropertyAttributes { get; set; }
他们不合适。根据您的JSON propertyAttributes
是object
,而不是array
。并且由于json反序列化器需要一个数组但是得到一个对象,它不能填充你的属性并且你得到null。
你确定这是你得到的JSON吗?它甚至不是有效的,因为属性名称在一个对象中被多次使用。这是正确的:
"propertyAttributes": [
{
"attr_name": "heat_type",
"attr_value": "Gas"
}, {
"attr_name": "hot_water_heater_type",
"attr_value": "Gas"
}
]
在这里,您会得到一个[...]
个对象{..}
,每个对象都有一个属性attr_name
和一个属性attr_value
。