2016-07-17 2 views
0

REST Webサービスが提供するJSONを逆シリアル化するのに問題があります。 これが問題DataContractJsonSerializer ReadObjectがNULL値を返しますか?

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; } 
} 

任意の提案を解決するための私の提案はありますか? コード通り。

+0

あなたはDataContractJsonSerializerを使用することに限定されていますか? Newtonsoft.Jsonを使用すると、JSON –

+0

を使用して作業するときにはるかに簡単で堅牢ですが、70-483試験の準備をしているので、DataContractJsonSerializerを使用する必要があります。あなたの貢献に感謝し、私はNewtonsoft.jsonフレームワークを使用しようとします –

答えて

0

あなたはまだそれが動作しますが、このサンプルを見てみましょう、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; } 
    } 
+0

ありがとうございます。問題が解決しました :) –

関連する問題