【发布时间】:2020-06-17 16:36:41
【问题描述】:
我目前正在研究一种解决方案,该解决方案将来自json 数组的电子邮件列表反序列化,一旦获得电子邮件对象列表,我将使用另一个类进行验证,然后将其设置到另一个列表中。
下面是反序列化的代码:
static void Main(string[] args)
{
string jsonTest = "{\"Emails\":[\"testUser@gmail.com\",\"testUser2@gmail.com\"]}";
Class1 contact = JsonConvert.DeserializeObject<Class1>(jsonTest);
Console.WriteLine(contact.Emails[0]);
Console.WriteLine(contact.Emails[1]);
}
并且,下面是用于反序列化的 Class1 的类定义:
public class Class1
{
private readonly List<ValidateEmail> emailsobj;
public List<string> Emails
{
get
{
return emailsobj.Select(o => o.EmailAdd).ToList();
}
set
{
foreach (string email in value)
{
emailsobj.Add(new ValidateEmail(email));
}
}
}
}
下面是validate 类:
public class ValidateEmail
{
public string EmailAdd { get; set; }
private bool Valid;
public ValidateEmail(string value)
{
try
{
MailAddress mail = new MailAddress(EmailAdd);
EmailAdd = value;
Valid = true;
}
catch (FormatException)
{
Valid = false;
}
}
}
每当我反序列化时,我都会在线收到异常:
Console.WriteLine(contact.Emails[0]);
Newtonsoft.Json.JsonSerializationException: 获取值时出错 “JsonGenerator.Class1”上的“电子邮件”。 ---> System.ArgumentNullException: 值不能为空。 (参数'来源')
看起来List<Email> 从未设置。对此有任何帮助,将不胜感激。
【问题讨论】:
-
请告知您遇到了什么错误?此行将失败 - JsonConvert.DeserializeObject
(jsonTest);因为类 1 中的 emailsobj 为空,什么是 MailAddress 类? -
是的,你是正确的 Mahesh。我收到了空引用错误消息。 MailAddress 是内置类,它是 system.net.email 的一部分。用于验证电子邮件。我刚刚更改为私有 List
emailsobj = new List ()。还是失败了。任何想法?如果您指出我的错误,那就太好了。引发以下错误,未处理的异常。 Newtonsoft.Json.JsonSerializationException:从“JsonGenerator.Class1”上的“电子邮件”获取值时出错。 ---> System.ArgumentNullException:值不能为空。 (参数“来源”)
标签: c# arrays list deserialization