c# - 如何解析在 MVC Controller 中收到的 JSON

标签 c# asp.net json http model-view-controller

我有一个 JSON 文件,它通过来自客户端的 POST 请求发送到 MVC Controller 。由于在 C# 中没有直接存储 JSON 的方法,我正在尝试创建模型来存储数据。这是 JSON 的结构:

{
    "SubscriptionsType1": {
        "Obj1": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        },
        "Obj2": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        },
        "Obj3": {
            "Value1": "3454234",
            "Value2": "345643564",
            "Value3": "665445",
            "Value4": "True"
        }
    },
"SubscriptionsType2": {
                "Obj1": {
                    "Value1": "3667635",
                    "Value2": "34563456",
                    "Value3": "234545",
                    "Value4": "False"
                },
                "Obj2": {
                    "Value1": "97865",
                    "Value2": "356356",
                    "Value3": "665757445",
                    "Value4": "True"
                },
                "Obj3": {
                    "Value1": "3454234",
                    "Value2": "345643564",
                    "Value3": "665445",
                    "Value4": "False"
                }
            },
    //etc..

    }

模型如下:

  public class RootObject {
        public IEnumerable<SubscriptionObj> Subscriptions { get; set; }
}


public class Subscriptions {
    IEnumerable<SubscriptionObj> objs;
}


public class SubscriptionObj
{
    public Int64 Value1 {get;set;}
    public Int64 Value2 {get;set;}
    public Int64 Value3 {get;set;}
    public Boolean Value4 {get;set;}
}

出于某种原因,如果我使用此结构创建模型类,在从 Controller 传递 JSON 对象后,根对象仍然为 null。 但是,当我显式创建属性来存储 JSON 对象的每个值时,它就起作用了。由于 JSON 对象没有固定数量的元素,我需要一种方法来动态存储每个属性。 如何做到这一点?

最佳答案

由于根对象和订阅中的键不同,您应该使用字典。

public class RootObject : Dictionary<string, Subscriptions> { }

public class Subscriptions : Dictionary<string, SubscriptionObj> { }

public class SubscriptionObj {
    public Int64 Value1 {get;set;}
    public Int64 Value2 {get;set;}
    public Int64 Value3 {get;set;}
    public Boolean Value4 {get;set;}
}

上面的代码会序列化为 OP 中的 JSON,但您丢失了强类型键/属性名称

关于c# - 如何解析在 MVC Controller 中收到的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46325235/

相关文章:

javascript - 使用 jquery 获取 json 数据的唯一值

c# - 通过 JSON 标签读取 JSON

c++ - 对 QVariantMap 节点的优雅非常量引用?

c# - 在具有 Datetime 数据类型的列上使用 C# 对数据集进行排序

c# - 在 ASP.NET 中第一次单击时按钮 OnClick 没有触发?

c# - 使用 BackgroundWorker.Backgroundworker 显示命令提示符输出

C# TrimStart 带字符串参数

c# - ASP.NET 中的模拟失败

C# 按 String[] 分隔符拆分,仅匹配精确单词

c# - 屏幕截图的屏幕覆盖