JsonConvert не работает со списком структур внутри класса
Здравствуйте, я хочу десериализовать класс, который содержит string
, bool
и List<[mystructtype>
;
Когда используешь JsonConvert.Deserialize<[myclass]>
это десериализует string
и bool
правильно, но не List<[Struct]>
Я также изменил List<struct>
с массивом structs
,
Оба class
контейнер и struct
отмечены Serializeable
и я не понимаю, где проблема. Может кто-нибудь мне помочь?
Struct[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 Строка является ответом от webserver
и я использую RestSharp
для создания запроса к серверу и получения ответа. response
Строка хорошая. class
является deserialized
хорошо, за исключением collection
,
В чем может быть проблема?
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
/
1 ответ
Я написал модульный тест, как показано ниже, и он проходит и правильно десериализован с помощью 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 в вашей строке ответа.