gpt4 book ai didi

c# - 在 MongoDB 中存储动态 JSON 数据

转载 作者:行者123 更新时间:2023-12-05 06:47:31 24 4
gpt4 key购买 nike

我的客户端服务生成一个包含动态字段的数据集。这是一些具有非结构化数据的匿名对象。我需要通过 POST 请求将此传输到我的存储服务。

现在我想以与接收数据相同的方式存储数据。问题是,我的存储服务将它解析为 JObject,当它存储在 MongoDB 中时会产生奇怪的数据。在 MongoDB Compass 中,我再也看不到数据集的值了。

目前正在发送以下测试数据:

{
"sessionId" : "202C25C1-DE25-499B-B4F1-1D46FA169A02",
"timestamp" : "5/6/2005 09:34:42 PM",
"type" : "request",
"data" : {
"testField1" : 120,
"testField2" : "Test Value",
"testField3" : [ "value1", "value2" ]
}
}

这是我从 MongoDB 得到的:

{
"_id": {
"$oid": "6076bceebc1aec06799826dd"
},
"SessionId": {
"$binary": "wSUsICXem0m08R1G+haaAg==",
"$type": "3"
},
"Timestamp": {
"$date": "2005-05-06T19:34:42.000Z"
},
"Type": 0,
"Data": {
"_t": "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed",
"_v": {
"testField1": {
"_t": "JValue",
"_v": []
},
"testField2": {
"_t": "JValue",
"_v": []
},
"testField3": {
"_t": "JArray",
"_v": [
{
"_t": "JValue",
"_v": []
},
{
"_t": "JValue",
"_v": []
}
]
}
}
}
}

编辑:此外,存储此数据会导致在尝试从数据库中检索数据时出现异常。 MongoDB 无法反序列化 JToken 对象,因为它无法访问某些方法/构造函数。

这几乎是垃圾。我尝试将 JSON 存储为字符串,但 MongoDB 没有将其存储为实际的 JSON 对象,而是存储为实际的字符串,因此破坏了基于文档的存储的意图:

{
"_id": {
"$oid": "6076bc8fbc1aec06799826a5"
},
"SessionId": {
"$binary": "wSUsICXem0m08R1G+haaAg==",
"$type": "3"
},
"Timestamp": {
"$date": "2005-05-06T19:34:42.000Z"
},
"Type": 0,
"Data": "{\"testField1\":120,\"testField2\":\"Test Value\",\"testField3\":[\"value1\",\"value2\"]}"
}

有什么解决方案可以让我以同样的方式存储动态对象吗?我不能简单地将它反序列化为 dynamic 对象,因为这会导致 JObject 因为它实际上是从动态接口(interface)派生的。但如前所述,MongoDB 无法正确处理这些对象。

最佳答案

其实是有答案的: https://mongodb.github.io/mongo-csharp-driver/2.8/examples/mixing_static_and_dynamic/

你只需使用 BsonDocument

class Post
{
// previous properties

public BsonDocument Metadata { get; set; }
}

BsonDocument 可以使用 BsonValue,这与 VARIANT 非常相似

因此您可以获取/设置任何类型的数据。

关于c# - 在 MongoDB 中存储动态 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67089682/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com