动态处理JSON变量

本文关键字:变量 JSON 动态处理 | 更新日期: 2023-09-27 17:50:59

你好,我有这样的JSON:

simples: {
   EA201SPACC25ANID-126276: {},
   GF867HDKLI25ANID-126309: {},
   RT211YUIAD912IDO-126310: {},
},

变量名总是不同的。我们如何为c#类声明模型?顺便说一句,我使用JSON。净

Thanks in advance

动态处理JSON变量

如果您的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)