C#反序列化JSON数据

Dan*_*ana 2 c# serialization json

我有一个JSON

{{  "action": "rma",  "devices": "[95001105,30013103,300117]",  "devandreason": [    {      "device": 95001105,      "reason": 100    },    {      "device": 30013103,      "reason": 300    },    {      "device": 300117,      "reason": 200    }  ]}}
Run Code Online (Sandbox Code Playgroud)

为此我试图得到devandreason一个数组.我尝试过创建课程

public class DevReasonList
    {
        public List<DevReason> devandreason { get; set; }
    }
    public class DevReason
    {
        public Double device { get; set; }
        public Double reason { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

json_serializer:

JavaScriptSerializer json_serializer = new JavaScriptSerializer();
DevReasonList deviceAndReasonList = json_serializer.Deserialize<DevReasonList>(json.devandreason);
Run Code Online (Sandbox Code Playgroud)

但它引发了一个例外:

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并使其成为一个数组?

Bot*_*ous 5

这应该是你的模型

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; }
}
Run Code Online (Sandbox Code Playgroud)

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

{  "action": "rma",  "devices": "[95001105,30013103,300117]",  "devandreason": [    {      "device": 95001105,      "reason": 100    },    {      "device": 30013103,      "reason": 300    },    {      "device": 300117,      "reason": 200    }  ]}
Run Code Online (Sandbox Code Playgroud)

额外奖励: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    }  ]}
Run Code Online (Sandbox Code Playgroud)

  • 甜蜜的甜蜜环节. (2认同)