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 в вашей строке ответа.

Другие вопросы по тегам