我是 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/