【问题标题】:Serialize JSON from Web service in Windows Phone 8.1在 Windows Phone 8.1 中从 Web 服务序列化 JSON
【发布时间】:2015-01-20 20:37:56
【问题描述】:

我正在尝试序列化 Web 服务调用的结果,但是当我使用字符串结果表单 Web 服务时它不起作用,但是,如果我使用具有相同内容的字符串,它会起作用。

这是我用来调用网络服务的代码:

 var client = new HttpClient();
 var response = await client.GetAsync(new Uri(url));
 string result = await response.Content.ReadAsStringAsync();

结果字符串是这个Json:

{"aa":[{"ts":"2015-01-18 21:00","bb":33783,"cc":7106,"dd":0,"ee":6775,"ff":3319,"gg":6112,"hh":6344,"ii":3703,"jj":581,"kk":-232,"ll":66},{"ts":"2015-01-18 21:10","bb":34263,"cc":7105,"dd":0,"ee":6750,"ff":3327,"gg":6224,"hh":6228,"ii":3690,"jj":1101,"kk":-232,"ll":65}]}

这些是我用来序列化的类:

[DataContract]
public class JsonClass{
    [DataMember]
    public List<aaDetails> aa{ get; set; }

}

 [DataContract]
public class aaDetails{
    [DataMember]
    public string ts { get; set; }
    [DataMember]
    public int? bb{ get; set; }
    [DataMember]
    public int? cc{ get; set; }
    [DataMember]
    public int? dd{ get; set; }
    [DataMember]
    public int? ee{ get; set; }
    [DataMember]
    public int? ff{ get; set; }
    [DataMember] 
  public int? gg{ get; set; }
        [DataMember]
        public int? hh{ get; set; }
        [DataMember]
        public int? i{ get; set; }
        [DataMember]
        public int? jj{ get; set; }
        [DataMember]
        public int? kk{ get; set; }
        [DataMember]
        public int? ll{ get; set; }
    }

如果我尝试使用来自 web 服务的字符串结果,它不起作用,数据为 NULL:

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(JsonClass));

 MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(result));
 JsonClass data= (JsonClass)serializer.ReadObject(memStream);

如果我放置一个内容相同的字符串并使用它,它就可以工作(数据包含所有元素):

result = @"{""aa"":[{""ts"":""2015-01-18 21:00"",""bb"":33783,""cc"":7106,""dd"":0,""ee"":6775,""ff"":3319,""gg"":6112,""hh"":6344,""ii"":3703,""jj"":581,""kk"":-232,""ll"":66},{""ts"":""2015-01-18 21:10"",""bb"":34263,""cc"":7105,""dd"":0,""ee"":6750,""ff"":3327,""gg"":6224,""hh"":6228,""ii"":3690,""jj"":1101,""kk"":-232,""ll"":65}]}";
 DataContractJsonSerializer serializer = new 

 DataContractJsonSerializer(typeof(JsonClass));

 MemoryStream memStream = new MemoryStream(Encoding.UTF8.GetBytes(result));
 JsonClass data= (JsonClass)serializer.ReadObject(memStream);

我也尝试过 NewtonsoftJson 库,结果是一样的:

var data= JsonConvert.DeserializeObject<JsonClass>(result);

我做错了什么? 非常感谢!

【问题讨论】:

  • 什么不起作用?您收到什么错误消息或异常?为什么不使用 JSON.Net?这要容易得多。
  • 请显示运行代码时遇到的错误
  • 我已经更新了问题。我没有收到任何错误。问题是当我使用来自 Web 服务的字符串时,序列化结果(数据变量)为空。有什么方法可以查看是否有错误?谢谢。

标签: c# json web-services windows-phone-8.1


【解决方案1】:

我检查了代码……我也遇到了同样的问题…… 我的代码中 dataContract 的返回类型不正确

public string ts { get; set; } 

这里的“ts”返回类型是字符串。但是,我怀疑它的日期时间。 供序列化参考click here to view json documentaion

这里是example for json similar like yours which helped me 希望我的评论能帮到你:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多