如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?

Posted

技术标签:

【中文标题】如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?【英文标题】:How do i create a model from a web api call in .Net core without knowing matching all the values in the returned json data? 【发布时间】:2021-10-27 16:00:02 【问题描述】:

我是 .Net 框架的初学者,我想知道如何在不匹配 json 数据中所有参数的情况下返回模型。例如,我有一个未知的 json 进来,但我知道会有一个“名称”和“昵称”值,所以我想从这些值创建一个对象模型。

【问题讨论】:

这能回答你的问题吗? Deserialize JSON into C# dynamic object? 【参考方案1】:

这是你的意思吗?

    public class MyClass
    
        public string key  get; set; 
        public NameArray[] array  get; set; 
    

    public class NameArray
    
        public string Name  get; set; 
    

    static void Main(string[] args)
    
        string jsonString = "\"key\": \"myKey\", \"array\": [\"Name\": \"John\",\"Name\": \"Jack\"]";
        var myClass = JsonSerializer.Deserialize<MyClass>(jsonString);

        Console.WriteLine($"key: myClass.key");
        Console.WriteLine($"name0: myClass.array[0].Name");
        Console.WriteLine($"name1: myClass.array[1].Name");
    

【讨论】:

【参考方案2】:

您需要一个具有您的值的类,这就是 JsonSerializer 将用来反序列化 json 字符串的类。

    public class MyClass
    
        public string Name  get; set; 
        public string Nickname  get; set; 
    

    static void Main(string[] args)
    
        string jsonString = "\"firstName\": \"ABC\", \"lastName\": \"XYZ\", \"age\": 5,  \"email\":\"abcxyz @blahblah.com\", \"Name\": \"ABC XYZ\", \"Nickname\": \"AZ\"";
        var myClass = JsonSerializer.Deserialize<MyClass>(jsonString);

        Console.WriteLine($"Name: myClass.Name");
        Console.WriteLine($"Nickname: myClass.Nickname");
    

【讨论】:

我想要一些不需要 MyClass 的东西,因为每个条目都有太多的值来为它创建一个特定的类,我只想把我的值像 firstName 提供给其他地方。 您的问题表明您有一个包含许多字段的 json,但无论如何,该 json 字符串中都会有一个名称和昵称。我知道这些字段名称可能不同,但我的假设是您在 json 字符串中有一些已知部分。这就是代码提取的内容。如果字段 Name 和 Nickname 也是未知的,那么 Filburt 的评论可能是比我的更合适的答案。您是否希望反序列化一个您没有先验信息的 json 字符串,然后创建一个在编译时也是未知且未定义的结构或类? 其实你的答案非常接近我的需要。基本上 json 结果具有以下形式:key: value, array: [Name: "John", etc.., Name: "Jack"]。如果我想要 john 和 jack,我怎样才能在你的回答中效仿? 使成员成为一个数组。如果您有一个 json 字段... "SomeArray: [Name: "John", Name: "Jack"] 您需要有另一个类 SomeArray ,其中包含成员 Name 。然后 MyClass 将有 public SomeArray[] someArray而不是公共字符串名称。

以上是关于如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不丢失值的情况下将 json 解析为 pandas 数据框? [复制]

如何在不指定键值的情况下获取 JSON 对象的最后一个元素?

Laravel:如何查询包含json数据的表中的列并仅返回查询匹配的对象

django怎么模糊匹配json中的数据?

如何从JSON字符串获取值的所有JSON路径列表?

如何在不知道其结构的情况下创建匹配枚举变体的宏?