如何在C#泛型处理程序中引用从javascript接收的反序列化对象属性?
我有一个JavaScript脚本,可以进行jQuery AJAX调用,并在“data”属性中传递一个序列化的JavaScript对象: 数据:{Specific:JSON.stringify({DAY:“1”,DEP:“2”,CARRIER:“3”, FLT:“4”,LEGCD:“5”} 它在C#通用处理程序中接收,因此:如何在C#泛型处理程序中引用从javascript接收的反序列化对象属性?,javascript,c#,ajax,generic-handler,Javascript,C#,Ajax,Generic Handler,我有一个JavaScript脚本,可以进行jQuery AJAX调用,并在“data”属性中传递一个序列化的JavaScript对象: 数据:{Specific:JSON.stringify({DAY:“1”,DEP:“2”,CARRIER:“3”, FLT:“4”,LEGCD:“5”} 它在C#通用处理程序中接收,因此: var Specific = JsonConvert.DeserializeObject(context.Request.Params["Specific"]); 在Vis
var Specific = JsonConvert.DeserializeObject(context.Request.Params["Specific"]);
在Visual Studio调试器中的通用处理程序中,我可以看到收到的对象
具体={{“日期”:“部门”:“承运人”:“航班”:”,
“LEGCD”:“}”
我的问题是,如何引用接收对象的属性(日期、DEP、FLT等)
我尝试了Specific.DAY
和Specific[“DAY”]
,但没有成功。而不是使用
var Specific = JsonConvert.DeserializeObject(context.Request.Params["SpecificFlt"]);
最后得到一个类型为“Specific”的System.Object
,它可能有助于反序列化为自定义类型,如下所示:
public class SpecificObj
{
public string DAY {get; set;}
public string DEP {get; set;}
public string CARRIER {get; set;}
public string FLT {get; set;}
public string LEGCD {get; set;}
}
及
可以使用更新版本的C#以其他方式进行此反射,如以下其中一个答案所述:
如果不想创建类,以下操作也可以
var specific = JObject.Parse(json);
// specific["DAY"] alone will return a JToken (JValue in this case),
// so use the explicit conversion to string
var day = (string)specific["DAY"];
或者,如果所有值都是字符串
var specific = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var day = specific["DAY"]
var-specific=JsonConvert.DeserializeObject(json);
var日=特定[“日”]
如果JSON中不存在
DAY
,第一个将返回null
,第二个将抛出KeyNotFoundException
我不确定双卷曲“{{”和“}}”的意义。这与此有关吗?为什么不直接执行数据:{SpecificFit:{DAY:“1”,DEP:}2}
我宁愿想出一个解决方案,而不是仅仅为一个简单的数据结构创建一个类。你能想出一种方法来引用我拥有的对象吗?如果不能,那我就得走你的路了。谢谢!@Kirby for ASP.Net MVC或Web API为compl创建一个模型是正常的ASP.Net将为您自动从JSON反序列化的ex对象。实际上,在考虑这个问题时,我按照您最初的建议使用了您的类示例。我希望避免我的App_代码文件夹中充斥着可能分散在各处的数十个小实用程序类。但是,我能够将此实用程序类作为嵌套类添加到t中通用处理程序本身是完美的,因为它的定义就在将使用它的类中,所有内容都是自包含的,并且组织得更好。谢谢!(注意,它在第一次尝试中也起了作用!;-)
var specific = JObject.Parse(json);
// specific["DAY"] alone will return a JToken (JValue in this case),
// so use the explicit conversion to string
var day = (string)specific["DAY"];
var specific = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var day = specific["DAY"]