Десериализация JSON в Silverlight 4 - PullRequest
4 голосов
/ 11 октября 2010

У меня есть класс MyItems в моем пространстве имен как

[DataContract]    
public class MyItems    { 
[DataMember]        
public int LineNum { get; set; }        
[DataMember]        
public string ItemCode { get; set; }        
[DataMember]        
public string Priority { get; set; }        
[DataMember]        
public string Contact { get; set; }        
[DataMember]        
public string Message { get; set; }    
}

и в XAML у меня есть кнопка, и в ее обработчике действий я пытаюсь десериализовать строку JSON, исходящую из формы, и пытаюсь обновить DataGrid.

На первом шаге Внутри слушателя действия я пытаюсь ..

List<MyItems> myItems= JSONHelper.DeserializeToMyItems<myItems>(result);

и результат (типа string) имеет

{"MyItems":[{"LineNum":"1","ItemCode":"A00001","Contact":"5","Priority":"1","Message":"IBM Infoprint 1312"},            {"LineNum":"2","ItemCode":"A00002","Contact":"5","Priority":"1","Message":"IBM Infoprint 1222"},            {"LineNum":"3","ItemCode":"A00003","Contact":"5","Priority":"1","Message":"IBM Infoprint 1226"},            {"LineNum":"4","ItemCode":"A00004","Contact":"5","Priority":"1","Message":"HP Color Laser Jet 5"},            {"LineNum":"5","ItemCode":"A00005","Contact":"5","Priority":"1","Message":"HP Color Laser Jet 4"}]}

Код JSONHelper.DeserializeToMyItems выглядит следующим образом:

public static List<MyItems> DeserializeToMyItems<MyItems>(string jsonString)        {            MyItems data = Activator.CreateInstance<MyItems>();            using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))            {                DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List<MyItems>));                return (List<MyItems>)serializer.ReadObject(ms);            }        }

Во время работы я получаю исключение в строке serializer.ReadObject (ms)

Unable to cast object of type 'System.Object' to type 'System.Collections.Generic.List`1[ServiceTicket.MyItems]'.

Я не уверен, как выполнить приведение типа, и я работаю со списком типов MyItems. Может кто-нибудь помочь мне в этом, пожалуйста? будет высоко оценен, поскольку я новичок в Silverlight.

спасибо

Denny

1 Ответ

3 голосов
/ 20 декабря 2010

Попробуйте следующее, это должно решить вашу проблему.

public class JsonHelper
{
    public static T Deserialize<T>(string json)
    {
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json)))
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
            return (T)serializer.ReadObject(ms);
        }
    }
}

и используйте описанный выше метод следующим образом:

List<MyItems> myItems = JsonHelper.Deserialize<List<MyItems>>(result);

Надеюсь, это поможет!

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