【发布时间】:2015-06-25 09:24:20
【问题描述】:
假设我有这些类:
public class BaseEntity
{
public int id;
}
public class A : BaseEntity
{
public int aField;
public C c;
}
public class B : BaseEntity
{
public string bField;
public C c;
}
public class C : BaseEntity
{
public string cField;
}
现在,当我想加载A 或B 对象时,我想使用JSON.Net JsonConverter 注释来序列化C,如下所示。例如这样的:
[JsonConverter(typeof(JsonConverterCustomImpl))]
public class C
{
public string cField;
}
序列化A或B对象的结果应该是这样的:
// A object
{
id: 0,
aField: 0,
cField: ''
}
// B object
{
id: 0,
bField: 0,
cField: ''
}
我不知道我应该如何实现JsonConverterCustomImpl 类。
更新
我是从this 使用的答案,也定义了FlattenJsonConverter 类并将其设置为A 和B 的JsonAnnotation,但是当我运行项目时,抛出了异常:
Newtonsoft.Json.dll 中出现“System.StackOverflowException”类型的未处理异常
更新
见下图,C 类在我的应用程序中是 Attachment,许多模型可能包含它。
Attachment 类有一个 byte[] fileContent 字段,其中包含上传的文件内容。所以我想将这个类序列化为扁平容器类,以便在UI 侧轻松访问fileContent。
我找到了this 序列化C 类展平的方法,但是在注释中使用JsonConverter 时会引发异常。
注意
我将fileContent 序列化为base64 string。
【问题讨论】:
-
您能稍微澄清一下您的问题吗? 1) 为什么需要
C上的转换器? 2)你的困难是序列化,还是反序列化? 3)你想为C创建什么json? -
@dbc 更新问题,请查收。
-
为什么不简单地在基类中添加一个
virtual byte[] fileContent { get { return null; } },然后在C中覆盖它?
标签: c# asp.net json serialization json.net