您好,我想反序列化包含string
,bool
和List<[mystructtype>
的类;
使用JsonConvert.Deserialize<[myclass]>
时反序列化{{1 }}和string
正确但不是bool
。我也用List<[Struct]>
数组更改了List<struct>
。
两个structs
容器和class
用struct
标记,我不明白问题出在哪里。
谁能帮我吗?
结构
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 }}字符串是好的。RestSharp
是response
很好,但不包括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\"
}
}
]
}"
/
答案 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对象开始。