JsonConvert不适用于类中的结构列表

时间:2018-10-14 18:15:07

标签: json deserialization restsharp nested-object

您好,我想反序列化包含stringboolList<[mystructtype>的类;
使用JsonConvert.Deserialize<[myclass]>时反序列化{{1 }}和string正确但不是bool。我也用List<[Struct]>数组更改了List<struct>
两个structs容器和classstruct标记,我不明白问题出在哪里。 谁能帮我吗?

结构
Serializeable

类容器

[Serializable]
    public struct Status
    {
        //identifiers
        public long playerId { get; set; }
        public long groupId { get; set; }
        public int type { get; set; }
    }

反序列化

[Serializable]
    class GatewayDeviceResponse
    {
        public bool status { get; set; }  //gets deserialized good
        public string message { get; set; } //gets deserialized good

        public Status[] data { get; set; }   // all members  are defaults
    }

PS 字符串是来自IRestResponse response = client.Execute(request); string result = Encoding.UTF8.GetString(response.RawBytes); GatewayDeviceResponse resp = JsonConvert.DeserializeObject<GatewayDeviceResponse>(result); return resp.data.ToList(); 的响应,我正在使用webserver创建服务器请求并获取响应。事情就是{{1 }}字符串是好的。RestSharpresponse很好,但不包括class

可能是什么问题?

PS 我得到的服务器的字符串响应是:

deserialized

服务器响应不应该完全填充collection数组元素,而只是我在 "{ \"status\":true, \"message\":\"ok\", \"data\":[ { \"status\":{ \"playerId\":59, \"groupId\":26, \"type\":2, \"deviceId\":\"abababa", \"groupName\":\"srl\", \"playerName\":\"Adrian\" } }, { \"status\":{ \"playerId\":25, \"groupId\":26, \"type\":1, \"deviceId\":\"lalal\", \"groupName\":\"srl\", \"playerName\":\"Alex\" } } ] }" /

中张贴的3个字段

1 个答案:

答案 0 :(得分:0)

我写了一个如下的单元测试,它通过了restsharp并正确地反序列化了。您可以替换响应字符串和类以检查单元测试是否仍通过吗?

可能是您的班级代表不适合您的回答。从http://json2csharp.com/获得一点帮助,并检查您的类是否正确代表了您的json。

[Test]
public void Can_Deserialize_Struct()
{
    var data = "{ \"myList\":[{\"name\": \"test1234\"}] }";

    JsonDeserializer json = new JsonDeserializer();
    var output = json.Deserialize<MyTest>(new RestResponse { Content = data });

    Assert.NotNull(output);
}

class MyTest
{
    public List<MyStruct> MyList { get; set; }
}

struct MyStruct
{
    public String name { get; set; }
}

根据您的响应字符串,您的c#类应代表您的json,如下所示:

public class Status
{
    public int playerId { get; set; }
    public int groupId { get; set; }
    public int type { get; set; }
    public string deviceId { get; set; }
    public string groupName { get; set; }
    public string playerName { get; set; }
}

public class StatusData
{
    public Status status { get; set; }
}

public class GatewayDeviceResponse
{
    public bool status { get; set; }
    public string message { get; set; }
    public List<StatusData> data { get; set; }
}

它与struct或class类型无关。您需要在状态表示类的前面添加另一个类。因为它从您的响应字符串中的json对象开始。