假设我有这些课程:
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;
}
现在,当我想加载JsonConverter
或C
个对象时,我想使用JSON.Net A
注释序列化B
,如下所示。例如:
[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: ''
}
我不知道shoud = ld我是如何实现JsonConverterCustomImpl
类的。
更新
我使用this回答,也定义了FlattenJsonConverter
类并将其设置为A
和B
的JsonAnnotation,但是当我运行项目时,抛出异常:
未处理的类型' System.StackOverflowException'发生在Newtonsoft.Json.dll
更新
请参见下图,我的应用程序中的C
类为Attachment
,许多模型可能包含该类。
Attachment
类有一个byte[] fileContent
字段,其中包含上传的文件内容。因此,我希望将此类序列化为容器类,以便轻松访问fileContent
方UI
。
我找到了this序列化C
类flatten的方法,但是在注释中使用JsonConverter
时会抛出异常。
注意
我将fileContent
序列化为base64 string
。
答案 0 :(得分:0)
找到一种简单地使用Newtonsoft.Json序列化对象的方法 (http://blog.bitlinkit.com/custom-json/)
public ActionResult hello()
{
dynamic d = new JObject();
d.MetricId = 11;
string json = Newtonsoft.Json.JsonConvert.SerializeObject(d);
return Content(json,"JSon");
}
无需实施JsonConverterCustomImpl
类
答案 1 :(得分:0)
在这种特殊情况下,您可以通过使用继承而不是组合来实现结果。 代码如下所示:
public class A : C
{
public int aField;
}
public class B : C
{
public string bField;
}
如果存在排除此解决方案的约束,请考虑编辑问题。