C# 如何在JsonConverter WriteObject内部以编程方式构造对象

C# 如何在JsonConverter WriteObject内部以编程方式构造对象,c#,json,json.net,C#,Json,Json.net,我试图在JsonConverter.WriteObject函数内部的航班上创建嵌套对象的结构 数据结构: 我做错了什么 有人能推荐一个编写自定义转换器的好指南吗 var container = new JObject(); var fi = e.PropertyA; JObject o = JObject.FromObject(fi); o.AddFirst(new JProperty("type", new JValue(fi.GetType().Name))); container.Ad

我试图在JsonConverter.WriteObject函数内部的航班上创建嵌套对象的结构

数据结构: 我做错了什么

有人能推荐一个编写自定义转换器的好指南吗

var container = new JObject();

var fi = e.PropertyA;
JObject o = JObject.FromObject(fi);
o.AddFirst(new JProperty("type", new JValue(fi.GetType().Name)));

container.Add(o);
这种方法失败了,只有一个例外

无法将Newtonsoft.Json.Linq.JObject添加到Newtonsoft.Json.Linq.JObject

如果我这样做

writer.WriteStartObject();
var fi = e.PropertyA;
JObject o = JObject.FromObject(fi);
o.AddFirst(new JProperty("type", new JValue(fi.GetType().Name)));

o.WriteTo(writer);
writer.WriteEndObject();
'处于ObjectStart状态的令牌StartObject将导致JSON对象无效。路径“源[0]”

答复 多亏了dbc,我才能够用下面的代码顺利完成

            var container = new JObject();

            var fi = e.PropertyA;
            JObject o = JObject.FromObject(fi);
            o.AddFirst(new JProperty("type", new JValue(fi.GetType().Name)));

            container.Add(new JProperty("ObjectA", o));


            container.WriteTo(writer);
根据定义,JSON对象是一组无序的名称/值对,因此在编写对象时,您需要在编写属性值之前执行以下操作:

writer.WritePropertyName("PropertyA");
o.WriteTo(writer);
类似地,将
JObject
添加到
JObject
时,需要将其嵌套在中以指定名称:

container.Add(new JProperty("PropertyA", o));
您得到的异常反映了这样一个事实,即您试图将
PropertyA
值添加到JSON对象,而不首先指定其名称


正在显示两者。

据我所知,Newtonsoft内置了序列化程序和反序列化程序。为什么不构建对象图,然后将其序列化为json对象?你正试图重新创造一些你随时可以得到的东西。此外,您在这里尝试的内容将更难阅读/维护/更新。祝你好运,但我建议使用现有的工具。根据JSON的定义,JSON对象是一组无序的名称/值对,因此在编写对象时,在编写属性值之前需要先执行以下操作。类似地,在向对象添加对象时,需要将其嵌套在中以指定名称。user7396598这是更广泛的技术问题的一部分。您可以在这里阅读我关于整个主题的另一个问题,有人能推荐编写自定义转换器的合适指南吗?--我认为这与堆栈溢出无关。但是,如果您希望向所有对象添加合成属性
“type”
,您可能会考虑使用自定义协定解析程序的建议。
container.Add(new JProperty("PropertyA", o));