2012-05-18 1 views
1

Mon application est asp.net. Je dois renvoyer des valeurs au serveur. Pour cela je crée un objet sérialiser et l'envoyer au serveur. Au niveau du serveur j'essaie de désérialiser il Après mon codeJavaScriptDeseializer: Impossible de sérialiser tableau

[Serializable] 
    public class PassData 
    { 
     public PassData() 
     { 
     } 

     public List<testWh> SelectedId { get; set; } 

     public string SelectedControlClientId { get; set; } 

     public string GroupTypeId { get; set; } 

     public string SectionTypeId { get; set; } 

    } 


    [Serializable] 
    public class testWh 
    { 
     public testWh() 

     { 
     } 
     public string Id { get; set; } 
    } 


JavaScriptSerializer serializer = new JavaScriptSerializer(); 
//this can not serialize the SelectedId and the count remains 0 
PassData data = serializer.Deserialize<PassData>(jsonString); 
//this serialize in an anonymous object with key value pair 
var data2 = serializer.DeserializeObject(textHiddenArguments.Text); 

suivant est mon JSON sérialisé Chaîne

{ 
    "SelectedId":{"0":"ABCD","1":"JKLM"}, 
    "SelectedControlClientId":"YTUTOOO", 
    "GroupTypeId":3, 
    "SectionTypeId":"1" 
} 

guillemets échappés chaîne

"{\"SelectedId\":{\"0\":\"ABCD\",\"1\":\"JKLM\"},\"SelectedControlClientId\":\"YTUTOOO\",\"GroupTypeId\":3,\"SectionTypeId\":\"1\"}" 

Mon problème est sélectionné Id est tableau d'objet testWH. Mais quand j'essaye de la dessécaliser, la propriété SelectedId de PassData qui est list n'est pas sérialisée et count reste à zéro.

J'ai essayé tableau en utilisant au lieu de la liste, qui a donné une exception « aucun paramètre constructeur moins ... »

Quelqu'un pourrait-il expliquer ce que je fais mal ici?

+0

Impossible de le comprendre. Que voulez-vous dire par code-fields/field-initializers? – Anand

+0

ah, désolé - c'était juste mon IDE changer ajouter dans les choses quand je collais –

Répondre

2

Le principal problème est ici que le JSON ne correspond pas aux objets que vous avez construit. Vous pouvez voir cela en écrivant les données que vous voulez et sérialisation:

var obj = new PassData 
{ 
    SelectedId = new List<testWh> 
    { 
     new testWh { Id = "ABCD"}, 
     new testWh { Id = "JKLM"} 
    }, 
    GroupTypeId = "3", 
    SectionTypeId = "1", 
    SelectedControlClientId = "YTUTOOO" 
}; 
string jsonString = serializer.Serialize(obj); 

qui donne JSON comme:

{"SelectedId":[{"Id":"ABCD"},{"Id":"JKLM"}], 
"SelectedControlClientId":"YTUTOOO","GroupTypeId":"3","SectionTypeId":"1"} 

Alors maintenant, vous devez décider que vous voulez changer; le JSON ou les classes. La classe alternative suivante fonctionne bien avec votre JSON d'origine, par exemple:

public class PassData 
{ 
    public Dictionary<string,string> SelectedId { get; set; } 
    public string SelectedControlClientId { get; set; } 
    public string GroupTypeId { get; set; } 
    public string SectionTypeId { get; set; } 
} 
+0

Oui, je peux voir les here.Thanks d'erreur! – Anand