C# 反序列化 JSON 数据

标签 c# json serialization

我有一个 JSON

{{  "action": "rma",  "devices": "[95001105,30013103,300117]",  "devandreason": [    {      "device": 95001105,      "reason": 100    },    {      "device": 30013103,      "reason": 300    },    {      "device": 300117,      "reason": 200    }  ]}}

我正在尝试获取 devandreason作为一个数组。 我尝试过创建类

public class DevReasonList
    {
        public List<DevReason> devandreason { get; set; }
    }
    public class DevReason
    {
        public Double device { get; set; }
        public Double reason { get; set; }
    }

json_serializer :

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
DevReasonList deviceAndReasonList = json_serializer.Deserialize<DevReasonList>(json.devandreason);

但它抛出异常:

json_serializer.Deserialize<DevReasonList>(json.devandreason) 'json_serializer.Deserialize<DevReasonList>(json.devandreason)' threw an exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' dynamic {Microsoft.CSharp.RuntimeBinder.RuntimeBinderException}

但我不知道我做错了什么:(

可以反序列化devandreason并使其成为一个数组?

最佳答案

这应该是您的模型

public class Devandreason
{
    public int device { get; set; }
    public int reason { get; set; }
}

public class RootObject
{
    public string action { get; set; }
    public string devices { get; set; }
    public List<Devandreason> devandreason { get; set; }
}

我删除了开头的 { 和尾随的 },它现在验证了

{  "action": "rma",  "devices": "[95001105,30013103,300117]",  "devandreason": [    {      "device": 95001105,      "reason": 100    },    {      "device": 30013103,      "reason": 300    },    {      "device": 300117,      "reason": 200    }  ]}

奖金:http://json2csharp.com/

编辑: 正如 @Sven 在评论中提出的:如果您的设备类型是 List,则 RootObject 会更容易遍历。

这是所需的 json,我刚刚删除了值之前的引号:

{  "action": "rma",  "devices": [95001105,30013103,300117],  "devandreason": [    {      "device": 95001105,      "reason": 100    },    {      "device": 30013103,      "reason": 300    },    {      "device": 300117,      "reason": 200    }  ]}

关于C# 反序列化 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43683175/

相关文章:

c# - ElasticProperty - 索引在 Nest 中不起作用 - ElasticSearch

c# - 读取旋转日志文件和文件锁定

c# - Newtonsoft JSON,检查属性及其值是否存在

javascript - 按字符串值排序并打印成 HTML

C# 将未标记为可序列化的类序列化为 byte[]

C#序列化

c# - 在抛出 AssertFailedException 的单元测试中比较两个数组

java - 使用 Gson 反序列化映射键需要一个对象

php - 如何获取来自另一个域的json数据?

python - 在 Django Rest Framework 中修改序列化器中的字段名称