我通过
将其转换为jsonobjectJsonObject jsonToProduce = JsonSerializer.Deserialize<JsonObject>(jsonString);
我想将上述jsonobject插入Couchbase。我写了
await collection.UpsertAsync("1", jsonToProduce);
发生错误
Newtonsoft.json.json.jsonserializationException:“自我引用循环为属性“父” type'system.text.json.nodes.jsonobject'检测到。路径“产品”
我看到了一些帖子,有人可能需要配置jsonserializer的选项。
var options = new JsonSerializerOptions
{
ReferenceHandler = ReferenceHandler.Preserve
};
或用
ReferenceHandler = ReferenceHandler.IgnoreCycles
代替
ReferenceHandler = ReferenceHandler.Preserve
任何人,都对我不起作用,发生了同样的错误。而且我正在使用
using System.Text.Json;
而不是纽顿斯托夫特的软件包,但我认为这不是一个问题。
当然,要插入/插入文档到couchbase,一种做到的方式就是
var something = new { Product = "abc", Price = 1 };
然后
await collection.UpsertAsync("1", something);
这肯定会起作用,但是有时这对我来说是不实用的,因为我将有一些jsonobject可以使用。我不可能从jsonobject中写出所有“键”和“值”。 另一个棘手的事情是,如果我直接这样做
await collection.UpsertAsync("1", jsonString);
couchbase中的结果文档看起来像这样
"{\r\n \"Product\": \"abc\",\r\n \"Price\": 100\r\n}"
棘手的事情是,如果我将
jsonString
直接发送给kafka作为消息,那是好的,没有这样的事物,也没有额外的“存在”。
我认为这是您正在混合system.text.json和newtonsoft(或类似的东西)。
\r\n
这甚至没有为我编译,因为
JsonObject jsonToProduce = JsonSerializer.Deserialize<JsonObject>(jsonString);
没有将字符串作为参数。因此,我不确定是100%确定发生了什么导致您的
JsonSerializer.Deserialize(...)
。,但是,我认为您的路是:
JsonSerializationException
(注意
var json = JsonConvert.DeserializeObject<JObject>(jsonString);
而不是然后这个Upsert效果很好:
JsonObject