Разбор JSON в XML с помощью Windows Phone - PullRequest
1 голос
/ 30 января 2012

У меня есть этот код, но я не могу заставить его работать.

Я пытаюсь вставить строку json в xml. Так что я могу получить список элементов, когда я анализирую данные. Есть ли лучший способ разобрать JSON в XML.

Если так, каков наилучший способ сделать это, и, если возможно, не могли бы вы дать мне рабочий пример?

URL-адрес в коде не является URL-адресом, который я использую

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Utilities;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Schema;
using Newtonsoft.Json.Bson;
using System.Xml;
using System.Xml.Serialization;
using System.Xml.Linq;
using System.Xml.Linq.XDocument;
using System.IO;



namespace WindowsPhonePanoramaApplication3
{
public partial class Page2 : PhoneApplicationPage
{
    public Page2()
    {
        InitializeComponent();
    }


    private void Form1_Load(object sender, EventArgs e1)
    {
        /* because the origional JSON string has multiple root's this needs to be added */
        string json = "{BFBC2_GlobalStats:";
        json += DownlodUrl("http://api.bfbcs.com/api/xbox360?globalstats");
        json += "}";

        XmlDocument doc = (XmlDocument)JsonConvert.DeserializeObject(json);
        textBox1.Text = GetXmlString(doc);
    }

    private string GetXmlString()
    {
        throw new NotImplementedException();
    }


    private string DownlodUrl(string url)
    {
        string result = null;
        try
        {
            WebClient client = new WebClient();
            result = client.DownloadString(url);
        }
        catch (Exception ex)
        {
            // handle error
            result = ex.Message;
        }
        return result;
    }

    private string GetXmlString(XmlDocument xmlDoc)
    {
        sw = new StringWriter();
        XmlTextWriter xw = new XmlTextWriter(sw);
        xw.Formatting = System.Xml.Formatting.Indented;
        xmlDoc.WriteTo(xw);
        return sw.ToString();
    }

        }
}

URL выводит следующий код:

{"StopName":"Race Hill",
"stopId":7553,
"NaptanCode":"bridwja",
"LongName":"Race Hill",
"OperatorsCode1":" 5",
"OperatorsCode2":" ",
"OperatorsCode3":" ",
"OperatorsCode4":"bridwja",
"Departures":[
{
"ServiceName":"",
"Destination":"",
"DepartureTimeAsString":"",
"DepartureTime":"30/01/2012 00:00:00",
"Notes":""}`

Спасибо за ваши ответы. Так должен ли я просто оставить данные в формате JSON, а затем просмотреть данные через это ???

Это способ показать данные из строки json.

public void Load()
{
// form the URI
UriBuilder uri = new UriBuilder("http://mysite.com/events.json");
WebClient proxy = new WebClient();  
proxy.OpenReadCompleted += new OpenReadCompletedEventHandler(OnReadCompleted);  
proxy.OpenReadAsync(uri.Uri);  
}

void OnReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
var serializer = new DataContractJsonSerializer(typeof(EventList));
    var events = (EventList)serializer.ReadObject(e.Result);
    foreach (var ev in events)
{
Items.Add(ev);
}
}
}

public ObservableCollection<EventDetails> Items { get; private set; }

Edit: Теперь сохранили URL-адрес как json и теперь работаем, используя способ json.

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Я не уверен, почему вы хотите конвертировать его в XML, а не просто анализировать непосредственно в объекты?

Используйте что-то вроде http://json2csharp.com/ для генерации ваших классов. Затем используйте DataContractJsonDeserializer, чтобы прочитать Json в объекты. Пример того, как это сделать, см. В этой статье MSDN .

Edt еще раз: Ах, я вижу, вы уже используете Newtonsoft.JSON - это хорошая альтернатива встроенной десериализации. Вы можете использовать это для десериализации набора объектов.

0 голосов
/ 30 января 2012

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

...