public class BMIRSProxy
{
static string json_url = string.Format("http://localhost:8081/bmirs_2015/php_scripts/get_staff_members.php");
public async static Task<StaffMember> GetStaffMember()
{
var http = new HttpClient();
var response = await http.GetAsync(json_url);
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(StaffMember));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (StaffMember)serializer.ReadObject(ms);
return data;
}
}
[DataContract]
public class StaffMember
{
[DataMember]
public string first_name { get; set; }
[DataMember]
public string last_name { get; set; }
[DataMember]
public string title { get; set; }
[DataMember]
public string profile { get; set; }
[DataMember]
public string image_uri { get; set; }
}
上面是我创建的类。但是当我可以在创建的按钮中使用方法 GetStaffMember
时,没有数据输出。当我调试时,我从 MemomryStream
实例 ms
得到了两个错误,如下所示:
- 列表项
ReadTimeout = 'ms.ReadTimeout' threw an exception of type 'System.InvalidOperationException'
- 列表项
WriteTimeout = 'ms.WriteTimeout' threw an exception of type 'System.InvalidOperationException'
下面是我用来调用GetStaffMember
方法的代码
private async void Button_Click(object sender, RoutedEventArgs e)
{
StaffMember myStaffMember = await BMIRSProxy.GetStaffMember();
}
非常感谢您的帮助,因为我现在卡住了
最佳答案
看起来您的 JSON 字符串是一个包含 1 个元素的数组。 因此,让我们反序列化为一个数组,并为您的数据绑定(bind)选择唯一的元素
public async static Task<StaffMember> GetStaffMemberAsync()
{
var http = new HttpClient();
var response = await http.GetAsync(json_url);
var result = await response.Content.ReadAsStringAsync();
var data = (JsonConvert.DeserializeObject<List<StaffMember>>(result))[0];
return data;
}
关于c# - 读取收到的 json 数据时出错。我正在使用 C# 开发一个 UWP,它从 json 读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35533877/