0

您好,我想反序列化一个包含 a string、 abool和 a 的类List<[mystructtype>
当使用JsonConvert.Deserialize<[myclass]>它反序列化stringbool正确但不是List<[Struct]>。我还List<struct>用一个数组更改了structs. 容器和容器
都标有,我不明白问题出在哪里。谁能帮我?classstructSerializeable

结构
[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
    }

反序列化

IRestResponse response = client.Execute(request);
                string result = Encoding.UTF8.GetString(response.RawBytes);

                GatewayDeviceResponse resp = JsonConvert.DeserializeObject<GatewayDeviceResponse>(result);
                return resp.data.ToList();

PS该字符串是来自a的响应webserver,我RestSharp用于创建服务器请求并获取响应。问题是字符串response很好。除了。classdeserializedcollection

问题可能是什么?

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

   "{  
   \"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\"
         }
      }
   ]
}"

Status[]数组元素不应该被服务器响应完全填充,只有我在 / 中发布的 3个POCO字段

4

1 回答 1

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; }
}

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

于 2018-10-15T06:31:55.870 回答