C# Json.NET(反)序列化邮件地址
在看了很多谷歌搜索和StackOverflow帖子后,我得出了一个结论:我可能需要创建自己的转换器。然而,这对我来说是非常非常新的,我不确定我在这些帖子中看到的例子中应该使用哪一个(如果有的话) 我有这门课,实际的课比这更复杂C# Json.NET(反)序列化邮件地址,c#,json,serialization,json.net,deserialization,C#,Json,Serialization,Json.net,Deserialization,在看了很多谷歌搜索和StackOverflow帖子后,我得出了一个结论:我可能需要创建自己的转换器。然而,这对我来说是非常非常新的,我不确定我在这些帖子中看到的例子中应该使用哪一个(如果有的话) 我有这门课,实际的课比这更复杂 public class Person { [JsonProperty(PropertyName = "id")] public string PersonId { get; set; } [JsonProperty(PropertyName =
public class Person {
[JsonProperty(PropertyName = "id")]
public string PersonId { get; set; }
[JsonProperty(PropertyName = "firstName")]
public string PersonFirstName { get; set; }
[JsonProperty(PropertyName = "email")]
public MailAddress PersonEmail { get; set; }
}
我需要序列化和反序列化以下json
{
"id" : "abc123"
, "firstName" : "John"
, "email" : "john@doe.com"
}
如何将MailAddress反序列化为包含MailAddress.Address的字符串,反之亦然
我得到的错误是:
无法从System.String转换或转换为
System.Net.Mail.MailAddress
Json.NET不能很好地处理某些.NET类型,如System.NET.IPAddress或System.NET.Mail.MailAddress。除非您愿意修改JSON,否则您必须编写一个自定义转换器,以便使用以下代码: 然后,您可以按照该帖子作者的建议修改您的类:
public class Person
{
[JsonProperty(PropertyName = "id")]
public string PersonId { get; set; }
[JsonProperty(PropertyName = "firstName")]
public string PersonFirstName { get; set; }
[JsonConverter(typeof(MailAddressConverter))]
[JsonProperty(PropertyName = "email")]
public MailAddress PersonEmail { get; set; }
}
…或者,您可以使用我的首选方法,即使用Json.NET:
那么在你的主要发言中:
您的json结构需要如下所示,因为MailAddress是一个对象:
{
"id": "1",
"firstName": "George",
"email": {
"DisplayName": "",
"User": "test",
"Host": "test.com",
"Address": "test@test.com"
}
}
您可以进行如下快速测试,以查看生成的JSON:
var person = new Person
{
PersonEmail = new System.Net.Mail.MailAddress("test@test.com"),
PersonFirstName = "George",
PersonId = "1"
};
var serialized = JsonConvert.SerializeObject(person);
你有什么问题?Json.NET应该闭上眼睛来做这件事。@CodingYoshi,正如您在这里看到的,它不起作用。@kiziu谢谢。ur to fast=帮我们一个忙,复制你进入问题的例外情况。为什么这会得到1票在解释范围内的否决票,2票在主题外的结束票,因为…?谢谢!也许我不擅长谷歌搜索,即使这么多年了。你知道我在搜索C Newtonsoft.Json MailAddress,但这篇文章没有出现,但将其更改为C Json.Net MailAddress,它是第四行。这看起来不错。我会试试的。我认为JsonConverter的标准方法不是检查提供的值是否对给定类型有效,而是让构造函数/解析器对其进行排序,如果不能这样做,则抛出异常。请看这里-,它没有捕获任何内容,只是运行解析。@RoLYroLLs在过去处理过IPAddress和IPEndpoint对象的此类问题后,我立即发现了错误,只需搜索C newtonsoft MailAddress转换器。谢谢,但我无法更改Json,因为它是第三方数据。准确地说,使用SalesforceAPI。
JsonConvert.DefaultSettings = () => new SerializerSettings();
{
"id": "1",
"firstName": "George",
"email": {
"DisplayName": "",
"User": "test",
"Host": "test.com",
"Address": "test@test.com"
}
}
var person = new Person
{
PersonEmail = new System.Net.Mail.MailAddress("test@test.com"),
PersonFirstName = "George",
PersonId = "1"
};
var serialized = JsonConvert.SerializeObject(person);