我有一个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.DAY
和Specific["DAY"]
,但没有成功。
答案 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#以其他方式完成,详见下文其中一个答案:
答案 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
。