2011-10-12 11 views
0

Je suis nouveau à l'architecture Silverlight et .net. Je travaille sur un projet Windows Phone 7. où je reçois des données au format JSON du serveur. Je reçois les données du serveur dans le rappel de l'interface webClient. Cependant, je ne suis pas capable de sérialiser les données dans les objets C#. J'utilise le code suivantComplexe deSerializing json wp7

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

le format de données que je suis censé faire est comme ça

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 
      } 
     ] 
    } 
    . 
    . 
    . 

et c'est la classe que j'utilise pour dé serilaize

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

} 

mais de sérialisation je reçois null dans la valeur. s'il vous plaît dites-moi où je pourrais aller mal.

C'est le type de données que je reçois, il ressemble à du serveur

{"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}]}, 
+1

Cela pourrait aider à la création de poco: http: //json2csharp.com/ –

+0

Merci beaucoup Derek ... . ça a marché. – Avijeet

Répondre

1

Il me semble que la propriété dans ScheduleResults devrait être schedules, pas results.


Je veux dire ceci:

public class SchedulesResults 
{ 

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

devrait être ceci:

public class SchedulesResults 
{ 

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

HI cjk, je ne comprends pas ce que vous entendez par "Rapports". – Avijeet

+0

Aussi pour fournir plus d'informations .. c'est le reault que je reçois du serveur {"planifications": [{"id": 3499, "progrès": - 9, "état": "complet", "starts_at": 1317945600, "primary_topic": {"id": 6}, "topic_secondaire": {"id": 11}, "scores": [{"schedule_id": 3499, "score": 2, "topic_id": 6} , {"schedule_id": 3499, "score": 3, "topic_id": 11}]}, – Avijeet

+0

@avijeet: J'ai mis à jour avec un exemple complet de ce que je veux dire. – cjk

0

Vous comparaissez pour essayer de désérialiser la réponse comme une instance de MyCLASS mais (à partir du code disponible) il se doit être de type SchedulesResults.

+0

Mon apologie c'était Copier coller une erreur. J'utilise actuellement Scheduleresults. Ma préoccupation est de savoir si je crée la bonne structure de classe? – Avijeet