【发布时间】:2016-11-08 19:27:21
【问题描述】:
我有这样的方法:
public static async void DoSomething()
{
try
{
var client = new HttpClient();
var url = "http://10.0.0.68/SET Initialization";
var url2 = "http://10.0.0.68/GET Status";
var response = await client.GetAsync(url);
Debug.WriteLine(response);
response = await client.GetAsync(url2);
Debug.WriteLine(response);
var result =await response.Content.ReadAsStringAsync();
var jsonString = result.Substring(4);
var serializer = new DataContractJsonSerializer(typeof(MediaStatus));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
var data = (MediaStatus)serializer.ReadObject(ms);
Debug.Write(data.ProgNo);
}
catch (Exception exception)
{
Debug.WriteLine(exception.Message, exception.Source);
}
}
MediaStatus.cs
[DataContract]
public class MediaStatus
{
[DataMember(Name = "progNo")]
public int ProgNo { get; set; }
[DataMember(Name = "index")]
public int Index { get; set; }
[DataMember(Name = "type")]
public string Type { get; set; }
[DataMember(Name = "group")]
public int Group { get; set; }
[DataMember(Name = "msg")]
public string Msg { get; set; }
[DataMember(Name = "secondGroup")]
public int SecondGroup { get; set; }
[DataMember(Name = "playFlag")]
public int PlayFlag { get; set; }
}
我只是简单地称呼它:
common.DoSomething();
我的问题是,有时代码运行良好并且会给我结果,但有时我会出错:
抛出异常:System.Private.DataContractSerialization.dll 中的“System.Runtime.Serialization.SerializationException” System.Private.DataContractSerialization:期待来自命名空间“”的元素“根”。遇到名称为“”,命名空间“”的“无”。
我必须用不同的网址调用两次await client.GetAsync
- 说我想和他谈谈的服务器
- 获取状态信息
【问题讨论】:
-
你在异步方法中,你为什么使用 .Result 而不是 await?无论如何,发布它抛出的Json。你可能没有得到任何返回的 Json 导致它抛出。
-
你好,谢谢回复,我改成:var result =await response.Content.ReadAsStringAsync();但没有帮助
-
可能是格式错误的 JSON。您可以发布 JSON 本身吗?
-
是的,你是对的,问题不在我这边,而是在服务器端,有时会返回错误的json字符串...
-
result.Substring(4);是干什么用的?是剥离字节序标记吗?如果是这样,为什么不直接将await response.Content.ReadAsStreamAsync()的返回值传递给ReadObject()?内部阅读器应使用 BOM 并相应地设置编码。
标签: c# json async-await uwp