C# 如何在我的web服务POST方法中反序列化JSON
我的web服务接收JSON格式的数据筛选值。以下是如何发送筛选条件的示例:C# 如何在我的web服务POST方法中反序列化JSON,c#,json,web-services,json.net,C#,Json,Web Services,Json.net,我的web服务接收JSON格式的数据筛选值。以下是如何发送筛选条件的示例: var jsonString = { "startDate":"2015-01-19T15:04:54.897Z", "endDate":"2016-01-19T15:04:54.897Z", "filterParams":{ "facilityIds": [ {"ID":1,"charID":"1","Description":"Health Group Umbrella
var jsonString = {
"startDate":"2015-01-19T15:04:54.897Z",
"endDate":"2016-01-19T15:04:54.897Z",
"filterParams":{
"facilityIds":
[
{"ID":1,"charID":"1","Description":"Health Group Umbrella Organization","DoubleValue1":35.009803,"DoubleValue2":85.21,"StringValue1":""},
{"ID":2,"charID":"2","Description":"Main Hospital Organization","DoubleValue1":35.04,"DoubleValue2":89.3,"StringValue1":""},
{"ID":3,"charID":"3","Description":"Regional Medical Center","DoubleValue1":35.04,"DoubleValue2":89.30,"StringValue1":""}
],
"GenderIds":[{"ID":0,"charID":"F","Description":"Female","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""}],
"AgeRangeIds":[{"ID":4,"charID":"4","Description":"30 - 34","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""}],
"HomeownerIds":[{"ID":7,"charID":"7","Description":"More Likely Owner 1","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""}],
"IncomeRangeIds":[{"ID":3,"charID":"3","Description":"$30,001 - $40,000","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""}],
"HasChildrenIds":[{"ID":0,"charID":"N","Description":"No","DoubleValue1":0,"DoubleValue2":0,"StringValue1":null}],
"EncoutnerTypesIds":
[
{"ID":2,"charID":"2","Description":"Ambulatory","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""},
{"ID":1,"charID":"1","Description":"InPatient","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""},
{"ID":3,"charID":"3","Description":"Emergency","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""},
{"ID":4,"charID":"4","Description":"Office Visit","DoubleValue1":0,"DoubleValue2":0,"StringValue1":""}
]
}
}
我可以提取开始日期和结束日期没有问题:
var jsonValues = jsonSerializer.Deserialize<Dictionary<string, object>>(jsonString);
DateTime startDate = DateTime.Parse(jsonValues["startDate"] as string);
DateTime endDate = DateTime.Parse(jsonValues["endDate"] as string);
下面的语句用正确的数据填充变量,但我无法访问这些值
var filterParams = jsonValues["filterParams"];
我需要以某种方式将数据反序列化到
字典中,但反序列化方法需要一个字符串参数,而filterParams是一个对象。您不需要手动反序列化每个属性
JavaScriptSerializer
您可以使用本机JavaScriptSerializer
将其直接反序列化为复杂对象:
RootObject obj = new JavaScriptSerializer().Deserialize<RootObject>(jsonString);
正如您所看到的,它比JavaScriptSerializer更快,并且具有更多的功能。您不需要手动反序列化每个属性
JavaScriptSerializer
您可以使用本机JavaScriptSerializer
将其直接反序列化为复杂对象:
RootObject obj = new JavaScriptSerializer().Deserialize<RootObject>(jsonString);
如您所见,它比JavaScriptSerializer
更快,功能也更多。您可以使用类似的方法(非常具体,但必须有效):
->这是使用Newtonsoft
public class YourJson
{
public DateTime startDate;
public DateTime endDate;
public FilterParams filterParams;
}
public class FilterParams
{
public __ID[] facilityIds;
public __ID[] GenderIds;
public __ID[] AgeRangeIds;
public __ID[] HomeownerIds;
public __ID[] IncomeRangeIds;
public __ID[] HasChildrenIds;
public __ID[] EncoutnerTypesIds;
}
public class __ID
{
public int ID;
public char charID;
public string Description;
public double DoubleValue1;
public double DoubleValue2;
public String StringValue1;
}
var yourJson = JsonConvert.DeserializeObject<YourJson>(json);
public类
{
公共日期时间开始日期;
公共日期时间结束日期;
公共过滤器参数过滤器参数;
}
公共类筛选器参数
{
公共ID[]设施ID;
公共ID[]性别ID;
public _ID[]agerangeid;
公共身份证[]房主;
public _ID[]incomerangeid;
public _ID[]有childrenid;
公共_uid[]编码类型SID;
}
公共类ID
{
公共int ID;
公共字符;
公共字符串描述;
公众双重价值1;
公众双重价值2;
公共字符串StringValue1;
}
var yourJson=JsonConvert.DeserializeObject(json);
您可以使用类似的方法(非常具体,但必须有效):
->这是使用Newtonsoft
public class YourJson
{
public DateTime startDate;
public DateTime endDate;
public FilterParams filterParams;
}
public class FilterParams
{
public __ID[] facilityIds;
public __ID[] GenderIds;
public __ID[] AgeRangeIds;
public __ID[] HomeownerIds;
public __ID[] IncomeRangeIds;
public __ID[] HasChildrenIds;
public __ID[] EncoutnerTypesIds;
}
public class __ID
{
public int ID;
public char charID;
public string Description;
public double DoubleValue1;
public double DoubleValue2;
public String StringValue1;
}
var yourJson = JsonConvert.DeserializeObject<YourJson>(json);
public类
{
公共日期时间开始日期;
公共日期时间结束日期;
公共过滤器参数过滤器参数;
}
公共类筛选器参数
{
公共ID[]设施ID;
公共ID[]性别ID;
public _ID[]agerangeid;
公共身份证[]房主;
public _ID[]incomerangeid;
public _ID[]有childrenid;
公共_uid[]编码类型SID;
}
公共类ID
{
公共int ID;
公共字符;
公共字符串描述;
公众双重价值1;
公众双重价值2;
公共字符串StringValue1;
}
var yourJson=JsonConvert.DeserializeObject(json);
我甚至建议使用json.net,little betterI将所有3个部分封装到一个FilterCriteria类中(startDate、endDate和filterParams)。我还将filterParams更改为Dictionary,并更改JavaScript,使其只传递filterParams的int数组,而不是整个复杂的FilterModel结构。然后我使用Newtonsoft Json对Json进行反序列化—工作起来很有魅力。感谢你们两位的帮助。我甚至建议使用json.net,little betterI将所有3个部分打包到一个FilterCriteria类中(startDate、endDate和filterParams)。我还将filterParams更改为Dictionary,并更改JavaScript,使其只传递filterParams的int数组,而不是整个复杂的FilterModel结构。然后我使用Newtonsoft Json对Json进行反序列化—工作起来很有魅力。谢谢你们两位的帮助。