我正在尝试在JsonConverter.WriteObject函数内部的飞行中创建嵌套对象的结构。
Container
Object A
Object B
我做错了什么?
有人可以推荐编写自定义转换器的体面指南吗?
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中的Token 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);
答案 0 :(得分:1)
根据JSON standard,JSON对象是无序的名称/值对,因此在编写对象时,您需要在编写属性值之前执行WritePropertyName()
:
writer.WritePropertyName("PropertyA");
o.WriteTo(writer);
同样,在向JObject
添加JObject
时,您需要将其嵌套在JProperty
中以指定名称:
container.Add(new JProperty("PropertyA", o));
您获得的异常反映了这样一个事实:您试图将PropertyA
值添加到JSON对象而不先指定其名称。
工作.Net fiddle同时显示两者。