JSON.net序列化为不同类型

时间:2017-11-29 18:59:38

标签: json.net

我有两种共享界面的类型......我正在尝试序列化,而不是反序列化,将一个InternalClass实例转换为JSON,基于该模式ExternalClass

interface iShared {
    public string ID {get; set;}
    public string Name {get; set;}
}
public class InternalClass : iShared {
    [JsonProperty("id")]
    public string ID {get; set;}
    [JsonProperty("name")]
    public string Name {get;set;}
    public int Age {get; set;}
}

public class ExertnalClass : iShared {
    [JsonProperty("externalId")]
    public string ID {get; set;}
    [JsonProperty("name")]
    public string Name {get;set;}
    public string Description {get; set;}
}

E.g。对于InternalClass的实例:

new InternalClass {ID = "abc", Name = "myName", Age = 30 }

而不是:

{"id": "abc", "name": "myName", "age": 30}

序列化为

{"externalId": "abc", name: "myName", description: null}

1 个答案:

答案 0 :(得分:0)

在给定此对象层次结构的情况下,这本身不可能实现。我看到两种快速的方法:

a)序列化为接口,反序列化为外部类,重新序列化为外部类:这应该添加额外的属性及其默认值。

b)如果您可以编辑类,请使用干净的方法:创建(显式)转换运算符或ToExternalClass()方法,并手动(或反射)复制其中的值。如果将来扩展这些类,构造函数ExternalClass(IShared cloneThis)可能有助于避免额外的工作。