Дезериализующий комплекс json wp7 - PullRequest
0 голосов
/ 12 октября 2011

Я новичок в Silverlight и архитектуре .net.Я работаю над проектом Windows Phone 7.где я получаю некоторые данные в формате JSON с сервера.Я получаю данные с сервера через обратный вызов интерфейса webClient.Однако я не могу де сериализовать данные в C # объектов.Я использую следующий код

public void GetData_Completed(object sender, DownloadStringCompletedEventArgs e)
    {

        byte[] encodedString = Encoding.UTF8.GetBytes(e.Result);

        //// Put the byte array into a stream and rewind it to the beginning
        MemoryStream ms = new MemoryStream(encodedString);
        ms.Flush();
        ms.Position = 0;

        // convert json result to model
        Stream stream = ms;
        DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeof(SchedulesResults));
        SchedulesResults myResults =
        (SchedulesResults)dataContractJsonSerializer.ReadObject(stream);

        var result = myResults;
    }

формат данных, который я должен получить, подобен этому

schedules: [
    {
        id: 2897
        progress: -9
        state: complete
        starts_at: 1315267800
        primary_topic: {
            id: 13
        }
        secondary_topic: {
            id: 9
        }
        scores: [
            {
            schedule_id: 2897
            score: 0
            topic_id: 13
            }
            {
            schedule_id: 2897
            score: 4
            topic_id: 9
            }
        ]
    }
    .
    .
    .

, и это класс, который я использую для де сериализации

public class SchedulesResults
{

    /// <summary>
    /// Gets or sets the results.
    /// </summary>
    /// <value>The results.</value>
    public Schedules[] results { get; set; }
}

public class Schedules
{
   int id { get; set; }
   int progress { get; set; }
   string state { get; set; }
   DateTime starts_at { get; set; }
   primary_topic primary_topic_ID { get; set; }
   secondry_topic secondary_topic_ID { get; set; }
   Scores[] scores { get; set; }

}
public class primary_topic
{
    int id { get; set; }
}

public class secondry_topic
{
    int id { get; set; }
}

public class Scores
{           
      int schedule_id{ get; set; }
      int score { get; set; }
      int topic_id { get; set; }

}

но при сериализации я получаю нулевое значение.Скажите, пожалуйста, где я могу ошибаться.

Это тип данных, которые я получаю с сервера

{"schedules":[{"id":3499,"progress":-9,"state":"complete","starts_at":1317945600,"primary_topic":{"id":6},"secondary_topic":{"id":11},"scores":[{"schedule_id":3499,"score":2,"topic_id":6},{"schedule_id":3499,"score":3,"topic_id":11}]},

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Мне кажется, что свойство в ScheduleResults должно быть schedules, а не results.


Я имею в виду следующее:

public class SchedulesResults 
{ 

    /// <summary> 
    /// Gets or sets the results. 
    /// </summary> 
    /// <value>The results.</value> 
    public Schedules[] results { get; set; } 
} 

Должно быть так:

public class SchedulesResults 
{ 

    /// <summary> 
    /// Gets or sets the results. 
    /// </summary> 
    /// <value>The results.</value> 
    public Schedules[] schedules { get; set; } 
} 
0 голосов
/ 12 октября 2011

Вы, похоже, пытаетесь десериализовать ответ как экземпляр MyCLASS, но (из доступного кода) похоже, что он должен иметь тип SchedulesResults.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...