如何在C#泛型处理程序中引用从javascript接收的反序列化对象属性?

时间:2018-03-22 15:21:30

标签: javascript c# ajax generic-handler

我有一个JavaScript脚本,它进行jQuery AJAX调用,并在"数据"中传递一个序列化的javascript对象。属性:

  

数据:{具体:JSON.stringify({DAY:" 1",DEP:" 2",CARRIER:" 3",   FLT:" 4",LEGCD:" 5"})

这是在C#Generic Handler中收到的:

var Specific = JsonConvert.DeserializeObject(context.Request.Params["Specific"]);

在Generic Handler中,在Visual Studio调试器中,我可以看到收到的对象。

  

具体= {{" DAY":""," DEP":""," CARRIER&#34 ;:""," FLT":"",   " LEGCD":"" }}

我的问题是,如何引用收到的对象的属性(DAY,DEP,FLT等)?

我尝试Specific.DAYSpecific["DAY"],但没有成功。

2 个答案:

答案 0 :(得分:0)

而不是使用

var Specific = JsonConvert.DeserializeObject(context.Request.Params["SpecificFlt"]);

以“特定”的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;}
}

var Specific = JsonConvert.DeserializeObject<SpecificObj>(context.Request.Params["SpecificFlt"]);

从那里你应该能够使用典型的点操作(Specific.DAY

来访问属性

编辑:或者你可以使用反射:

Type t = Specific.GetType();
PropertyInfo p = t.GetProperty("DAY");
string day = (string)p.GetValue(Specific);

这种反映可以使用更新版本的C#以其他方式完成,详见下文其中一个答案:

How to access property of anonymous type in C#?

答案 1 :(得分:0)

如果您不想创建课程,以下内容也可以使用

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"]

如果JSON中不存在DAY,则第一个将返回null,第二个将返回KeyNotFoundException