c# - 反序列化包含原始类型和一种类类型的对象 []

标签 c# json serialization json.net

我有一个包含字符串和长整型的对象数组以及这个类:

public class SimpleMailAddress
{
    public string Address { get; set; }
    public string Name { get; set; }

    public static implicit operator MailAddress(SimpleMailAddress m)
    {
        return new MailAddress(m.Address, m.Name);
    }
}

但是,当使用 Json.Net 反序列化 JSON 数组时,我得到一个包含 AddressName 而不是 SimpleMailAddress 的匿名类型对象。

我不想创建一个强类型对象来反序列化,因为它不会被重用,我必须为它创建很多对象。有没有办法用 Json.Net 或任何其他库来做到这一点?

这就是我序列化/反序列化的方式:

var json = JsonConvert.SerializeObject(myObject);
var myObject = JsonConvert.DeserializeObject<MailMessageRequest>(json);

MailMessageRequest:

public class MailMessageRequest
{
    public string Mailer { get; set; }
    public string Method { get; set; }
    public object[] Args { get; set; }
}

最佳答案

Json 不包含关于您的 SimpleMailAddress 类的任何继承信息。因此,当您告诉它反序列化时,事实上您的 Args 属性属于 Object 类型,反序列化器正在尽其所能(通过创建匿名类型)。它只是查看数据,不知道您需要一个 SimpleMailAddress 对象。

Json.net 有一个 JObject 类。如果 Args 的实际内容可能会更改类型,请尝试使用它而不是 Object 作为您的 Args 参数。

然后,根据需要,您可以从JObject 对象中读取数据。

如果您不关心 Args 的实际内容,则将其保留为 Object 并忽略它。

编辑:JSon.Net 可以在序列化期间嵌入可在反序列化期间使用的类型信息。

将您的 Args 参数保留为 Object。然后在序列化和反序列化期间使用 AllTypeNameHandling 选项。

var json = JsonConvert.SerializeObject(myObject, Formatting.None, 
    new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });
var myObject = JsonConvert.DeserializeObject<MailMessageRequest>(json, 
    new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });

您最终应该将 Args 对象作为您想要的 SimpleMailAddress 对象。

关于c# - 反序列化包含原始类型和一种类类型的对象 [],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16746428/

相关文章:

php - 上传到服务器后不允许英特尔 XDK Ajax 访问 [在 xampp 中工作良好]

ios - Restkit 在嵌套外键关系中使用@parent

.Net Xml 反序列化 - 支持多个命名空间

c# - .NET - 使用 "as"显式转换与 (someType)someobject 有何不同(在内部),为什么?

c# - 目录存在在桌面与服务器上产生不一致的结果

C# 代码问题 : Revision Numbers and Letters

c# MailKit 如何从邮件服务器 (IMAP) 中删除电子邮件

php - 如何在预先存在的 SQL 数据库之上使用 Elastic Search?

serialization - 将 Delta<T> 序列化为 JSON

c# - ServiceStack JsonSerializer 继承时不序列化对象成员