updateasync不支持jsonobject

问题描述 投票:0回答:1

我通过

将其转换为jsonobject

JsonObject 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);

而不是
c# json couchbase
1个回答
0
投票
)。

然后这个Upsert效果很好:

JsonObject


最新问题
© www.soinside.com 2019 - 2025. All rights reserved.