2012-05-18 2 views
1

Мое приложение asp.net. Мне нужно отправить некоторые значения обратно на сервер. Для этого я создаю объект, сериализуя его и отправляю на сервер. На сервере я пытаюсь десериализации это Ниже мой кодJavaScriptDeseializer: не может сериализовать массив

[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); 

Ниже мой Json Serialized Строка

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

котировки спасся строку

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

Моя проблема выбран Идентификатор массив объекта testWH. Но когда я пытаюсь описать его, свойство SelectedId PassData, которое является списком, не становится сериализованным, а count остается равным нулю.

Я попытался с помощью массива вместо списка, который дал исключение «без параметров меньше конструктора ...»

Может ли один объяснить, что я делаю неправильно здесь?

+0

Невозможно это понять. Что вы понимаете под кодовыми полями/инициализаторами полей? – Anand

+0

ах, извините - это была только моя надстройка в среде IDE, когда я вставлял –

ответ

2

Основная проблема заключается в том, что JSON не соответствует объектам, которые вы создали. Вы можете увидеть это, написав данные, которые вы хотите и сериализации:

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

который дает JSON как:

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

Итак, теперь вы должны решить, какой вы хотите изменить; JSON или классы. Следующий альтернативный класс отлично работает с вашим оригинальным JSON, например:

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

Да, я вижу ошибку здесь. Спасибо! – Anand