我有两种共享界面的类型......我正在尝试序列化,而不是反序列化,将一个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}
答案 0 :(得分:0)
在给定此对象层次结构的情况下,这本身不可能实现。我看到两种快速的方法:
a)序列化为接口,反序列化为外部类,重新序列化为外部类:这应该添加额外的属性及其默认值。
b)如果您可以编辑类,请使用干净的方法:创建(显式)转换运算符或ToExternalClass()
方法,并手动(或反射)复制其中的值。如果将来扩展这些类,构造函数ExternalClass(IShared cloneThis)
可能有助于避免额外的工作。