2017-11-01 6 views
0

は、グリッド・バウンスAPIを送信し、すべての空白ですが、私にこのようなリストを返します:私はJSONをデシリアライズしようとした次のクラスを使用して正しいJSONデシリアライズ後のオブジェクトの数が、彼らは

"[ 
    {\"created\":1487173664,\"email\":\"[email protected]\",\"reason\":\"550 No Such User Here \",\"status\":\"550\"} 
    ,{\"created\":1487169530,\"email\":\"[email protected]\",\"reason\":\"550 Requested action not taken: mailbox unavailable \",\"status\":\"550\"} 
    ,{\"created\":1487095343,\"email\":\"[email protected]\",\"reason\":\"550 Requested action not taken: mailbox unavailable \",\"status\":\"550\"} 
    ,{\"created\":1487093087,\"email\":\"[email protected]\",\"reason\":\"550 Requested action not taken: mailbox unavailable \",\"status\":\"550\"} 
    ,{\"created\":1487085008,\"email\":\"[email protected]\",\"reason\":\"550 Requested action not taken: mailbox unavailable \",\"status\":\"550\"} 
    ,{\"created\":1487082934,\"email\":\"[email protected]\",\"reason\":\"550 Invalid recipient <[email protected]> (#5.1.1) \",\"status\":\"550\"} 
]" 

を(してみました直列化など[DataMember]装飾なしで動作W/Oそれ)だけで罰金:

[DataContract(Name = "SendGridBounce")] 
public class SendGridBounce 
{ 
    [DataMember] 
    public int Created { get; set; } 
    [DataMember] 
    public string Email { get; set; } 
    [DataMember] 
    public string Reason { get; set; } 
    [DataMember] 
    public string Status { get; set; } 
} 

[CollectionDataContract(Name = "SendGridBounceList")] 
public class SendGridBounceList : List<SendGridBounce> 
{ 
} 

そして、これは私がやった方法である:

var client = new SendGridClient("some API key here"); 
string queryParams = String.Format(CultureInfo.InvariantCulture, "{{ 'end_time': {0}, 'start_time': 1 }}", DateTimeOffset.UtcNow.ToUnixTimeSeconds()); 
var response = Task.Run(() => client.RequestAsync(SendGridClient.Method.GET, urlPath: "suppression/bounces", queryParams: queryParams)).Result; 

DataContractJsonSerializer js = new DataContractJsonSerializer(typeof(SendGridBounceList)); 
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(response.Body.ReadAsStringAsync().Result))) 
{ 
    SendGridBounceList bl = js.ReadObject(ms) as SendGridBounceList; 

    foreach (var b in bl) 
    { 
     tbxOutput.Text += b.Created.ToString() + ", " + b.Status + ", " + b.Email + ", " + b.Reason + Environment.NewLine; 
    } 
} 

最終的には、SendGridによって返されたJSONと同じ数の項目がリストに含まれていますが、各項目は初期化されていません{0, null, null, null}。私は間違って何をしていますか?次のように解決策がDataMember装飾を変更することでした

+3

それはおそらくあなたのプロパティ名のケースです。プロパティは、JSONで小文字になります。 – Amy

+0

@Amy違いはありません – ajeh

+0

@ L.Bもう少し精巧にできますか? – ajeh

答えて

0

[DataContract(Name = "SendGridBounce")] 
public class SendGridBounce 
{ 
    [DataMember(Name ="created")] 
    public int Created { get; set; } 
    [DataMember(Name = "email")] 
    public string Email { get; set; } 
    [DataMember(Name = "reason")] 
    public string Reason { get; set; } 
    [DataMember(Name = "status")] 
    public string Status { get; set; } 
} 
関連する問題