C#中将JSON属性转换成数组

4
"inputs": {
    "input1": {
        "value": "abc"
    },
    "input2": {
        "value": "cde"
    },
    "input3": {
        "value": "efg"
    },
    "input4": {
        "value": "ghi"
    },      
}

在“inputs”中的属性数量可能会有所不同。 我该如何将其反序列化为类:

class Inputs
{
    public Input[] Values{get; set;}
}

class Input
{
    public string input {get; set;}
}

有一个选项是将json中的“inputs”更改为数组,但我现在没有这个选择


你的 JSON 数据格式是不是完全符合要求了?其中 input1input2 等都是动态的,可以有任意数量的输入? - maccettura
@maccettura,不幸的是,是的。 - TheCoder
2个回答

5

您的数据与以下数据结构相匹配。

public class Data
{
    public Dictionary<string, Dictionary<string, string>> Inputs { get; set; }
}

由于您并未提及使用任何库来进行JSON对象的序列化/反序列化,我建议使用相当著名的.Net框架下的NewtonSoft库。

在您的情况下,您可以使用以下代码片段来对数据进行反序列化。

var data = JsonConvert.DeserializeObject<Data>(YOUR_JSON_STRING);

-1

如何安装

安装-Package Newtonsoft.Json:

在Visual Studio中,选择工具菜单->管理Nuget包管理器解决方案并输入“JSON.NET”以在线搜索。以下是图示:

enter image description here

然后创建一个类,其中输入参数是您希望作为JSON响应获取的参数。
public class Inputs
{
    public string input1 { get; set; }
    public string input2 { get; set; }
    public string input3 { get; set; }
    public string input4 { get; set; }
}

现在我们将使用JsonConvert类的DeserializeObject()方法将其转换为.NET对象。以下是代码:
private void JSONDeserilaize(string json)
{
    var obj = JsonConvert.DeserializeObject<Inputs>(json);
}

现在您已经成功反序列化了一个类型为Inputs的对象


3
请不要给出一般性的、与问题无关的例子,这并不能回答问题。如果您想建议一些库,最好在评论中提出。 - Gilad Green
海报特别要求如何反序列化。 - Ňɏssa Pøngjǣrdenlarp
抱歉,我已经编辑了我的答案以符合规则。 - Di Kamal
3
我不认为这个答案完全正确。因为原帖中指出输入数量可以是任意数字。 - Hasan Emrah Süngü
是的,这完全是错误的。JSON 显然是动态的,使用具有 input1input2 等的类是行不通的。 - maccettura

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接