Cal*_*res 8 c# serialization json json.net
我有一个包含字符串和long的对象数组和这个类:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当使用Json.Net反序列化JSON数组时,我得到一个包含Address而Name不是SimpleMailAddress对象的匿名类型.
我不想创建一个强类型对象来反序列化,因为它不会被重用,我必须为它创建很多对象.有没有办法用Json.Net或任何其他库来做到这一点?
这就是我序列化/反序列化的方式:
var json = JsonConvert.SerializeObject(myObject);
var myObject = JsonConvert.DeserializeObject<MailMessageRequest>(json);
Run Code Online (Sandbox Code Playgroud)
而且MailMessageRequest:
public class MailMessageRequest
{
public string Mailer { get; set; }
public string Method { get; set; }
public object[] Args { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Json不包含有关您的SimpleMailAddress类的任何继承知识。因此,当您告诉它反序列化时,您的Args属性是type的事实Object,则反序列化器正在尽其所能(通过创建匿名类型)。它只是看到数据,却不知道您是否需要SimpleMailAddress对象。
Json.net有一个JObject类。如果Args的实际内容可能会更改类型,请尝试使用该参数代替Object作为Args参数。
然后,根据需要,您可以从JObject对象读取数据。
如果您不关心Args的实际内容,则将其保留为原样Object并忽略它。
编辑: JSon.Net可以在序列化过程中嵌入类型信息,这些信息可以在反序列化过程中使用。
将Args参数保留为Object。然后在序列化和反序列化期间都使用TypeNameHandling选项All。
var json = JsonConvert.SerializeObject(myObject, Formatting.None,
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });
var myObject = JsonConvert.DeserializeObject<MailMessageRequest>(json,
new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.All });
Run Code Online (Sandbox Code Playgroud)
您应该最终将Args对象作为所需SimpleMailAddress对象。
| 归档时间: |
|
| 查看次数: |
2068 次 |
| 最近记录: |