Sam*_*vdd 5 c# wpf web-services microsoft-metro
我web-api返回一个用户对象.在那个对象中有一个DateTime属性.当我在我的应用程序中读取它时,我得到一个错误,因为代表DateTime的字符串无效,它丢失了\Date ...
{System.Runtime.Serialization.SerializationException:反序列化User类型的对象时出错.DateTime内容'1984-10-02T01:00:00'不以'/ Date('和'以'结尾'开头,如JSON所要求的那样.--->
public static async Task<User> GetUser(string email)
{
try
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(url + "?email="+email);
if (response.IsSuccessStatusCode)
{
string content = await response.Content.ReadAsStringAsync();
User user = DataService.Deserialize<User>(content);
return user;
}
return null;
}
}
catch (Exception ex)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我用来反序列化的方法.
public static T Deserialize<T>(string json) {
try
{
var _Bytes = Encoding.Unicode.GetBytes(json);
using (MemoryStream _Stream = new MemoryStream(_Bytes))
{
var _Serializer = new DataContractJsonSerializer(typeof(T));
return (T)_Serializer.ReadObject(_Stream);
}
}
catch (Exception ex)
{
throw ex;
}
}
Run Code Online (Sandbox Code Playgroud)
要解决这个问题,可能最简单的方法是将DataContract类型的值类型设置为"string".然后,如果您需要使用.NET日期时间,则需要对字符串值执行DateTime.Parse.这将消除您的反序列化问题.序列化的原始类可能使用字符串值开头,因为它缺少日期所需的格式.
请注意,当您执行DateTime.Parse时,如果存在时区信息,它会将其转换为您计算机的本地时间(这是愚蠢的,我知道).仅供参考.
在JSON规范中没有用于交换日期的标准格式,这就是为什么JSON中存在许多不同的异构日期格式的原因!
DataContractJsonSerializer序列化日期,自1970年以来计算msecs的格式包围了Date()这样的事情:Date(1335205592410)并期望相同的格式反序列化DateTime.但是,作为JSON日期字符串获得的是ISO8601格式,这是当今大多数浏览器/软件用于序列化日期的格式!
JavaScriptSerializer是.Net中的另一种JSON序列化程序,几乎可以序列化任何类型,包括与JSON字符串相关的匿名类型,并且能够以ISO8601格式或格式DataContractJsonSerializer提供的方式反序列化JSON日期.
使用JavaScriptSerializer,您的Deserialize方法如下所示:
public static T Deserialize<T>(string json)
{
return new JavaScriptSerializer().Deserialize<T>(json);
}
Run Code Online (Sandbox Code Playgroud)
我在添加Json.net(Newtonsoft.Json)包时找到了解决方法.
public async static Task<T> Deserialize<T>(string json)
{
var value = await Newtonsoft.Json.JsonConvert.DeserializeObjectAsync<T>(json);
return value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44017 次 |
| 最近记录: |