如何在C#通用处理程序中引用从JavaScript接收的反序列化对象属性?
解决C#处理程序中访问反序列化JSON属性的问题
嘿,我明白你的问题了!你已经成功通过AJAX把序列化后的JSON对象传到C#处理程序里,也完成了反序列化,但因为没指定具体的对象类型,导致没法直接引用那些属性对吧?别担心,这里有两种简单的解决办法:
方法1:创建强类型实体类(推荐)
这是最规范的做法,类型安全还能获得IntelliSense支持。首先创建一个和你JSON结构完全匹配的类:
// 定义和JSON属性对应的实体类 public class FlightDetails { 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<FlightDetails>(context.Request.Params["Specific"]); // 现在就能直接访问属性啦! string day = specific.DAY; string dep = specific.DEP; string carrier = specific.CARRIER; // 其他属性同理
方法2:使用动态类型或JObject(快速临时方案)
如果不想创建实体类,也可以用dynamic类型或者JObject来快速访问属性:
用dynamic类型
dynamic specific = JsonConvert.DeserializeObject(context.Request.Params["Specific"]); // 直接通过属性名访问 string day = specific.DAY; string dep = specific.DEP;
用JObject(需要引入Newtonsoft.Json.Linq命名空间)
using Newtonsoft.Json.Linq; // 反序列化为JObject JObject specific = JsonConvert.DeserializeObject<JObject>(context.Request.Params["Specific"]); // 通过索引器获取属性值,记得转成对应的类型 string day = specific["DAY"].ToString(); string dep = specific["DEP"].ToString();
为什么之前没法访问?
你之前用JsonConvert.DeserializeObject()不带泛型参数的话,返回的是object类型,编译器不知道这个对象里包含哪些属性,所以没法直接引用。上面两种方法要么给编译器明确的类型信息,要么用动态/JObject绕开编译时检查,就能顺利访问属性啦!
内容的提问来源于stack exchange,提问作者KWallace
相关产品推荐
相关产品推荐

