현재 json
배열에서 이메일 목록을 역 직렬화하는 솔루션을 작업 중입니다. 이메일 객체 목록을 받으면 다른 클래스를 사용하여 유효성을 검사 한 다음 다른 목록으로 설정합니다.
다음은 Deserialize에 대한 코드입니다.
static void Main(string[] args)
{
string jsonTest = "{\"Emails\":[\"[email protected]\",\"[email protected]\"]}";
Class1 contact = JsonConvert.DeserializeObject<Class1>(jsonTest);
Console.WriteLine(contact.Emails[0]);
Console.WriteLine(contact.Emails[1]);
}
그리고 아래는 Class1
deserialize 에 대한 클래스 정의입니다 .
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'의 'Emails'에서 값을 가져 오는 동안 오류가 발생했습니다. ---> System.ArgumentNullException : 값은 null 일 수 없습니다. (매개 변수 '소스')
List<Email>
결코 설정되지 않은 것 같습니다 . 이것에 대한 어떤 도움이라도 대단히 감사하겠습니다.
Lists-를 사용하는 경우 아래 설정 (Replace)을해야합니다 ObjectCreationHandling
.
Replace
항상 새 개체를 만들고 Lists
!에 대한 setter 속성을 활성화합니다 .
따라서 Class1
아래와 같이 새 목록을 초기화 한 후 :
private readonly List<ValidateEmail> emailsobj = new List<ValidateEmail>();
설정을 갖도록 코드를 변경하십시오.
var settings = new JsonSerializerSettings
{
ObjectCreationHandling = ObjectCreationHandling.Replace
};
Class1 contact = JsonConvert.DeserializeObject<Class1>(jsonTest, settings);
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다