动态处理JSON变量
本文关键字:变量 JSON 动态处理 | 更新日期: 2023-09-27 17:50:59
你好,我有这样的JSON:
simples: {
EA201SPACC25ANID-126276: {},
GF867HDKLI25ANID-126309: {},
RT211YUIAD912IDO-126310: {},
},
变量名总是不同的。我们如何为c#类声明模型?顺便说一句,我使用JSON。净
Thanks in advance
如果您的Json结构将保持不变
因为你不能有像EA201SPACC25ANID-126276
这样的属性,这里最简单的方法是:
public class MyCustomModel
{
[JsonProperty("EA201SPACC25ANID-126276")]
public string Something_1 { get; set; }
[JsonProperty("GF867HDKLI25ANID-126309")]
public string Something_2 { get; set; }
[JsonProperty("RT211YUIAD912IDO-126310")]
public string Something_3 { get; set; }
}
那么就反序列化对象:
JsonConver.DeserializeObject<MyCustomModel>(myJsonString);
如果你的Json属性会随时间改变(其他名称)
如果是这种情况,您可以选择接收字典或手动绑定它。对于基本场景,第一个选项应该可以正常工作:
public ActionResult(Dictionary<string, string> model)
但是这种方法在复杂的对象绑定上失败。为了避免这种情况,您可以创建一个自定义模型绑定器,如:
public class MyCustomBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.RequestContext.HttpContext.Request;
var dictionary = new Dictionary<string, object>();
foreach(var item in request.QueryString.Keys.Cast<string>())
{
// You might want to cast your data into appropriate types...
dictionary.Add(item, request.QueryString[item]);
}
return dictionary;
}
}
在控制器上,使用:
public ActionResult Index([ModelBinder(typeof(MyCustomBinder))] Dictionary<string, object> model)