c# - 在 UWP 中下载 JSON (C#)

标签 c# .net json xaml win-universal-app

我是 UWP 平台开发的新手。

我为 Windows 10 移动版编写 UWP 应用。

我是这样下载的

public async Task<string> FetchAsync(string url)
{
    string jsonString;

    using (var httpClient = new System.Net.Http.HttpClient())
    {
        var stream = await httpClient.GetStreamAsync(url);
        StreamReader reader = new StreamReader(stream);
        jsonString = reader.ReadToEnd();
    }

    return jsonString;
}

像这样写入文件:

  string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
        var json = await FetchAsync(url);
        using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
        {
            json.Save(fs);
        }

        Debug.WriteLine(json);

完整代码:

  using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Threading.Tasks;
using System.Xml;
using Windows.ApplicationModel.Calls;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.System;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace  Murakami
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public  sealed  partial class   MainPage : Page
    {
        public MainPage()
        {




            string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
            var json = await FetchAsync(url);
            using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
            {
                json.Save(fs);
            }

            Debug.WriteLine(json);


            this.InitializeComponent();
            XmlDocument doc = new XmlDocument();
            XmlElement el = (XmlElement)doc.AppendChild(doc.CreateElement("Order"));
            el.SetAttribute("CallConfirm", "1");
            el.SetAttribute("PayMethod", "");
            el.SetAttribute("QtyPerson", "");
            el.SetAttribute("Type", "1");
            el.SetAttribute("PayStateID", "0");
            el.SetAttribute("Remark", "{StreetName} , ..");
            el.SetAttribute("RemarkMoney", "0");
            el.SetAttribute("TimePlan", "");
            el.SetAttribute("Brand", "1");
            el.SetAttribute("DiscountPercent", "0");
            el.SetAttribute("BonusAmount", "0");
            el.SetAttribute("Department", "");

            XmlElement el2 = (XmlElement)el.AppendChild(doc.CreateElement("Customer"));

            el2.SetAttribute("Login", "");
            el2.SetAttribute("FIO", "{FIO}");

            XmlElement el3 = (XmlElement)el.AppendChild(doc.CreateElement("Address"));

            el3.SetAttribute("CityName", "");
            el3.SetAttribute("StationName", "");
            el3.SetAttribute("StreetName", "{StreetName}");
            el3.SetAttribute("House", "{HouseName}");
            el3.SetAttribute("Corpus", "");
            el3.SetAttribute("Building", "");
            el3.SetAttribute("Flat", "{FlatName}");
            el3.SetAttribute("Porch", "");
            el3.SetAttribute("Floor", "");
            el3.SetAttribute("DoorCode", "");

            XmlElement el4 = (XmlElement)el.AppendChild(doc.CreateElement("Phone"));

            el4.SetAttribute("Code", "{Code}");
            el4.SetAttribute("Number", "{Phone}");

            XmlElement el5 = (XmlElement)el.AppendChild(doc.CreateElement("Products"));




              using (FileStream fs = new FileStream("test.xml", FileMode.Create))
              {
                  doc.Save(fs);
              }

              Debug.WriteLine(doc);







        }

       async private void TwitterButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://twitter.com/murakami_rest"));

        }

       async private void FacebookButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://www.facebook.com/MURAKAMI.rest"));
        }

       async  private void button9_Click_1(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://vk.com/murakami_restaurant_delivery"));
        }

        async private void InstagramButton_Click(object sender, RoutedEventArgs e)
        {
            await Launcher.LaunchUriAsync(new Uri("https://instagram.com/murakami_in_ua/"));

        }

        private void PhoneCallButton_Click(object sender, RoutedEventArgs e)
        {
            PhoneCallManager.ShowPhoneCallUI("+380442308888","");
        }

        private void ProMurakamiButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(ProMurakami));

        }

        private void BludoDnyaButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(BludoDnya));
        }

        private void CartButton_Click(object sender, RoutedEventArgs e)
        {
            Frame.Navigate(typeof(Cart2));
        }


        /* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
         {
             PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
         }*/
    }




   public async Task<string> FetchAsync(string url)
    {
        string jsonString;

        using (var httpClient = new System.Net.Http.HttpClient())
        {
            var stream = await httpClient.GetStreamAsync(url);
            StreamReader reader = new StreamReader(stream);
            jsonString = reader.ReadToEnd();
        }

        return jsonString;
    }
}

我有这些错误:

 Error  CS0116  A namespace cannot directly contain members such as fields or methods



 Error  CS0103  The name 'FetchAsync' does not exist in the current context Murakami    



  Error CS4033  The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.    

我的代码错误在哪里?

非常感谢您的帮助!

最佳答案

我看过你的代码。

首先

你所在的地方:

/* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
     {
         PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
     }*/
} // <-- This brace is closing off the class too early.

最后一个大括号关闭了类,因此 FetchAsync(url) 方法尝试声明为其自己的类。

删除此代码后面有问题的 },并将其放在底部。像这样:

            /* private void textBlock_SelectionChanged(object sender, RoutedEventArgs e)
         {
             PhoneCallManager.ShowPhoneCallUI("0213132131", "my name");
         }*/


        public async Task<string> FetchAsync(string url)
        {
            string jsonString;

            using (var httpClient = new System.Net.Http.HttpClient())
            {
                var stream = await httpClient.GetStreamAsync(url);
                StreamReader reader = new StreamReader(stream);
                jsonString = reader.ReadToEnd();
            }

            return jsonString;
        }
    } 
} // <-- Add this one, right here

这会导致你的

Error CS0116 A namespace cannot directly contain members such as fields or methods

Error CS0103 The name 'FetchAsync' does not exist in the current context Murakami

还有 其次

您的 await FetchAsync(url); 调用位于类的构造函数内,不能将其标记为 async

您需要创建一个新方法,包装您的

var json = await FetchAsync(url);
            using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
            {
                json.Save(fs);
            }

            Debug.WriteLine(json);

在它自己的 async 方法中,然后从构造函数中调用该方法。

像这样:

    private async void NewMethod(string url)
    {
        var json = await FetchAsync(url);
        using (FileStream fs = new FileStream("cache1.txt", FileMode.Create))
        {
            // Do stuff in here to write to your file...
        }

        Debug.WriteLine(json);
    }

访问https://msdn.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files了解有关在 UWP 中向文件写入文本的更多信息。

并从您的ctor调用它...

public MainPage() {
        string url = "http://papajohn.pp.ua/?mkapi=getProductsByCat&cat_id=82";
        NewMethod(url); // Now call your newly-created method.

        ... // Do your other stuff as before.
}

这就是导致你的原因

Error CS4033 The 'await' operator can only be used within an async method. Consider marking this method with the 'async' modifier and changing its return type to 'Task'.

希望这有帮助!如果您需要更多信息,请告诉我。

关于c# - 在 UWP 中下载 JSON (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087387/

相关文章:

c# - MS Windows 服务和 https

c# - 无法确定 etaxiDataModel 关系的主体端。多个添加的实体可能具有相同的主键

.net - 使用 System.DirectoryServices 时尝试访问已卸载的应用程序域

json - import.io JSON 数据

c# - 如何使用 C# 从 JSON 数组中获取特定值

javascript - 循环遍历对象以执行最接近的高整数的数学运算?

c# - MVC.net 核心 : response type always json not xml with ICollection

c# - 如何从 C# 中的数据集获取精度和比例?

.net - mvvm-light:我们应该在定位器中合并清理方法吗?

c# - 使用 Linq 从另一个具有匹配值的列表更新列表