如何在Windows Phone 8上阅读这个json?

时间:2013-09-04 09:58:24

标签: json windows-phone-8

我正在尝试使用newtonsoft.json

在Windows手机应用中阅读以下json

我看不懂任何东西。对我来说也很奇怪。

{"type": "Menu","menu": [{"0":"antipasto","tipo_piatto":"antipasto","1":"porchetta","nome_piatto":"porchetta","2":"1","prezzo":"1"}, {"0":"primo","tipo_piatto":"primo","1":"matriciana","nome_piatto":"matriciana","2":"5","prezzo":"5"}, {"0":"secondo","tipo_piatto":"secondo","1":"salsicce","nome_piatto":"salsicce","2":"4","prezzo":"4"}, {"0":"contorno","tipo_piatto":"contorno","1":"patate","nome_piatto":"patate","2":"2","prezzo":"2"}, {"0":"dolce","tipo_piatto":"dolce","1":"gelato","nome_piatto":"gelato","2":"6","prezzo":"6"}]}

这是我现在的c#代码

 public class piatto_menu_giorno
    {
        public string tipo_piatto { get; set; }
        public string nome_piatto { get; set; }
        public string prezzo { get; set; }

    }

    public menu()
    {
        InitializeComponent();

        WebClient webClient = new WebClient();
        Uri uri = new Uri("http://www.stepapp.it/areacli/extDevice/getMenuOdierno_101.php");
        webClient.OpenReadCompleted += new OpenReadCompletedEventHandler(fine_lettura_web);
        webClient.OpenReadAsync(uri);
    }

    private void fine_lettura_web(object sender, OpenReadCompletedEventArgs e)
    {
        DataContractJsonSerializer json = null;
        json = new DataContractJsonSerializer(typeof(ObservableCollection<piatto_menu_giorno>));
        ObservableCollection<piatto_menu_giorno> menu = json.ReadObject(e.Result) as ObservableCollection<piatto_menu_giorno>;
        if(menu==null)
            menu_giorno.Text = "null";
        else
        foreach (piatto_menu_giorno piatto in menu)
        {
                menu_giorno.Text += piatto.nome_piatto + "\n";
        }
    }

抱歉意大利语中的所有变量名称

1 个答案:

答案 0 :(得分:0)

我正在为您编写代码,它将帮助您将对象从json反序列化到yourClassCustomObject。

private async Task<List<piatto_menu_giorno>> MyDeserializerFunAsync()
{
    List<piatto_menu_giorno> book = new List<piatto_menu_giorno>();
    try
    {
       //I am taking my url from appsettings. myKey is my appsetting key. You can write direct your url.
       string url = (string)appSettings["mykey"];
       var request = HttpWebRequest.Create(url) as HttpWebRequest;
       request.Accept = "application/json;odata=verbose";
       var factory = new TaskFactory();
       var task = factory.FromAsync<WebResponse>(request.BeginGetResponse,request.EndGetResponse, null);
       var response = await task;
       Stream responseStream = response.GetResponseStream();
       string data;
       using (var reader = new System.IO.StreamReader(responseStream))
       {
           data = reader.ReadToEnd();
       }
       responseStream.Close();
       DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(List<piatto_menu_giorno>));
       MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
       book = (List<piatto_menu_giorno>)json.ReadObject(ms);
       return book;
   }
} 

上面的代码在我的wp8应用程序中工作,你可以尝试更快,它会帮助你。我正在执行异步操作,但您可以使用piatto_menu_giorno返回类型创建简单方法。