0

我正在尝试使用 newtonsoft.json 在 Windows Phone 应用程序中读取以下 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";
        }
    }

对不起所有意大利语的变量名

4

1 回答 1

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 返回类型创建您的简单方法。

于 2013-11-18T06:03:00.003 回答