【问题标题】:DataContractJsonSerializer ReadObject return NULL value?DataContractJsonSerializer ReadObject 返回 NULL 值?
【发布时间】:2016-07-17 02:39:37
【问题描述】:

我在反序列化 REST Web 服务提供的 JSON 时遇到问题。 这是我解决问题的建议

class Program
{       
    static void Main(string[] args)
    {
        RestResponse r = readFromWeb("http://www.808.dk/?code-csharp-httpwebrequest");
        Console.ReadKey();
    }
    static RestResponse readFromWeb(string url)
    {
        HttpWebRequest request = HttpWebRequest.Create("http://services.groupkt.com/country/get/all") as HttpWebRequest;
        request.ContentType = "application/json";
        request.Method = "GET";
        HttpWebResponse response = request.GetResponse() as HttpWebResponse;
        Stream webStream = response.GetResponseStream();
        DataContractJsonSerializer json = new DataContractJsonSerializer(typeof(RestResponse));
        RestResponse resttresponse = (RestResponse)json.ReadObject(webStream);
        return resttresponse;
    }
}

还有 DataContract 类

[DataContract]
public class RestResponse
{
    [DataMember]
    public List<string> messages { get; set; }
    [DataMember]
    public List<City> result { get; set; }       
}
[DataContract]
public class City
{        
    [DataMember]
    public string name { get; set; }
    [DataMember]
    public string alpha2_code { get; set; }
    [DataMember]
    public string alpha3_code { get; set; }
}

有什么建议吗? 诚挚的。

【问题讨论】:

  • 您是否仅限于使用 DataContractJsonSerializer ?在使用 JSON 时,使用 Newtonsoft.Json 更容易和更健壮
  • 不,但我正在准备 70-483 考试,所以我必须使用 DataContractJsonSerializer。感谢您的贡献,我会尝试使用 Newtonsoft.json 框架

标签: c# asp.net .net wcf datacontract


【解决方案1】:

您仍然需要保存 RestResponse 的 Json 对象,看看这个示例,它可以工作:

  internal class Program
  {
    private static void Main(string[] args)
    {
      //var r = readFromWeb("http://www.808.dk/?code-csharp-httpwebrequest");
      var r = readFromWeb("http://services.groupkt.com/country/get/all");
      Trace.Write(r);
    }

    private static MyJson readFromWeb(string url)
    {
      var request = WebRequest.Create(url) as HttpWebRequest;
      request.ContentType = "application/json";
      request.Method = "GET";
      var response = request.GetResponse() as HttpWebResponse;
      var webStream = response.GetResponseStream();
      var json = new DataContractJsonSerializer(typeof (MyJson));
      var resttresponse = (MyJson) json.ReadObject(webStream);
      return resttresponse;
    }
  }

  [DataContract]
  public class MyJson
  {
    [DataMember(Name = "RestResponse")]
    public RestResponse RestResponse { get; set; }
  }

  [DataContract]
  public class RestResponse
  {
    [DataMember(Name = "messages")]
    public string[] messages { get; set; }

    [DataMember(Name = "result")]
    public City[] result { get; set; }
  }

  [DataContract]
  public class City
  {
    [DataMember(Name = "name")]
    public string name { get; set; }

    [DataMember(Name = "alpha2_code")]
    public string alpha2_code { get; set; }

    [DataMember(Name = "alpha3_code")]
    public string alpha3_code { get; set; }
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多