Json和反序列化

时间:2018-06-08 05:57:20

标签: c# json

我有一个问题是找到一个对象的类型。我使用MailChimp API并尝试了几种不同的方案。其中一个是发送错误的电子邮件地址(blablagmail.com,@缺失)。

我想反序列化json以便能够创建包含所有错误的字符串。这里的json只有两个属性让我烦恼:

"error_count":1,
"errors":[
    {
      "email_address":"blablagmail.com",
      "error":"Please provide a valid email address."
    }
 ],

基本上,我尝试做的是创建一个包含记录器所有错误的唯一字符串。类似的东西:

errors =" email_address:blablagmail.com,错误:请提供有效的电子邮件地址。"

我尝试将errors转换为List<Dictionary<string, string>>,但它不起作用。问题是属性(email_addresserror)根据错误可以有不同的名称。

这里创建的类是为了反序列化json

public class MailChimpResponse
{
    public object[] new_members { get; set; }
    public object[] updated_members { get; set; }
    public object[] errors { get; set; }
    public int total_created { get; set; }
    public int total_updated { get; set; }
    public int error_count { get; set; }
} 

MailChimpResponse obj = new JavaScriptSerializer().Deserialize<MailChimpResponse>(response);

现在,如果error_count&gt; 0我想记录错误,所以我想创建一个genreic函数来将这个对象数组(object[] errors)转换为字符串。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我在控制台应用程序中模拟了您的场景。此示例的输出正如您在问题中提到的那样。我使用了JavaScriptSerializer

class Program
{
    static void Main(string[] args)
    {
        string json = "{\"error_count\":1,\"errors\":[{\"email_address\":\"blablagmail.com\",\"error\":\"Please provide a valid email address.\"}]}";

        MailChimpResponse obj = new JavaScriptSerializer().Deserialize<MailChimpResponse>(json);

        if (obj != null && obj.error_count > 0 && obj.errors!=null)
        {
            string errorString = "";

            foreach (var error in obj.errors)
            {
                var casting = (Dictionary<string,object>)error;

                errorString = string.Join(",", casting.Select(x => x.Key + ":" + x.Value).ToArray());
            }

            Console.WriteLine(errorString);
        }

        Console.ReadLine();
    }
}

public class MailChimpResponse
{
    public object[] new_members { get; set; }
    public object[] updated_members { get; set; }
    public object[] errors { get; set; }
    public int total_created { get; set; }
    public int total_updated { get; set; }
    public int error_count { get; set; }
}

<强>输出

email_address:blablagmail.com, error:Please provide a valid email address.