WP7 ArrayAdapter эквивалент - PullRequest
0 голосов
/ 20 ноября 2011

У меня есть объект JSON, возвращенный из службы WCF, он возвращает два объекта «Article» и выглядит следующим образом:

{"GetArticlesResult":[{"ArticleName":"Mobile Application Development","ArticleText":"Lots of text here."},{"ArticleName":"Super Fast Development Cycle","ArticleText":"Lots more text here."}]}

И я могу отобразить его в окне сообщения с таким кодом:

MessageBox.Show(e.Result);

То, что я хочу сделать, это отобразить список ArticleNames в ListBox, затем я захочу связать их с другой страницей, чтобы отобразить ArticleText, но это будет позже.

Мои исследования показали, что мне нужно использовать DataContractJsonSerializer, но я застрял здесь, все примеры кажутся немного сложными. В приложении для Android я бы просто использовал ArrayAdapter для заполнения чего-либо. Могу ли я сделать нечто подобное в приложении WP7?

Приветствия

Mike.

EDIT

Теперь у меня есть следующее, как мне отобразить результаты в ListBox?

MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(e.Result));
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Article));

//put ms into a listBox here????....

[DataContract]
    public class Article
    {
        [DataMember()]
        public string Title { get; set; }

        [DataMember()]
        public string Text { get; set; }
    }

Ответы [ 2 ]

1 голос
/ 22 ноября 2011

Вам необходимо установить свойство ItemsSource списка в массив / список (или ObservableCollection, если вы собираетесь добавить больше элементов во время его отображения). Если вы используете ViewModel, вы можете привязать свойство ItemsSource к свойству ObservableCollection на вашей виртуальной машине, и оно обновится автоматически.

Вы можете использовать JSON.NET (это быстрее, чем DataContractJsonSerializer), чтобы либо десериализовать JSON для строго типизированной объектной модели и связать ее, либо использовать ту же библиотеку для десериализации JSON с dynamic и затем получите доступ к свойствам JSON из этого.

Если вы используете строго типизированную объектную модель, вам необходимо реализовать изменения, внесенные xyzzer в Article / ArticleList, для правильного отображения.

0 голосов
/ 20 ноября 2011

Может быть, List будет работать для вас, чтобы десериализовать / представить массив из структуры JSON. В противном случае - вопрос слишком расплывчатый. Вы спрашиваете, как отобразить коллекцию в ListBox? Использование привязки ItemsSource ...

* EDIT

Попробуйте это:

var jsonString = "{\"GetArticlesResult\":[{\"ArticleName\":\"Mobile Application Development\",\"ArticleText\":\"Lots of text here.\"},{\"ArticleName\":\"Super Fast Development Cycle\",\"ArticleText\":\"Lots more text here.\"}]}";
var articles = Deserialize<ArticleList>(jsonString);
Debug.WriteLine(articles.GetArticlesResult.Count);

[DataContract]
public class ArticleList
{
    [DataMember]
    public List<Article> GetArticlesResult { get; set; }
}

[DataContract]
public class Article
{
    [DataMember(Name = "ArticleName")]
    public string ArticleName { get; set; }

    [DataMember(Name = "ArticleText")]
    public string ArticleText { get; set; }
}

public static T Deserialize<T>(string strData) where T : class
{
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
    byte[] byteArray = Encoding.UTF8.GetBytes(strData);
    MemoryStream memoryStream = new MemoryStream(byteArray);
    T tRet = serializer.ReadObject(memoryStream) as T;
    memoryStream.Dispose();
    return tRet;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...