Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在将Json反序列化到BsonDocument时指定属性类型_C#_Json_Mongodb_Bson - Fatal编程技术网

C# 在将Json反序列化到BsonDocument时指定属性类型

C# 在将Json反序列化到BsonDocument时指定属性类型,c#,json,mongodb,bson,C#,Json,Mongodb,Bson,我正在尝试将非结构化JSON对象(存在多种模式可能性)反序列化为BsonDocument,并尝试为某些属性指定正确的类型(我事先知道) 比如说(非常简单的例子): 所以我知道每当我在对象的根上找到一个“Id”属性(可能在那里,也可能不在那里),它就会被转换成UUID类型(bson binary type 4) 我已经创建了一个简单的JsonReader子体,我正在重写ReadBsonType,并返回一个新的currentbontype并在那里提供一个转换后的值,然后重写每个可能类型的所有方法(R

我正在尝试将非结构化JSON对象(存在多种模式可能性)反序列化为
BsonDocument
,并尝试为某些属性指定正确的类型(我事先知道)

比如说(非常简单的例子):

所以我知道每当我在对象的根上找到一个“Id”属性(可能在那里,也可能不在那里),它就会被转换成UUID类型(bson binary type 4)

我已经创建了一个简单的
JsonReader
子体,我正在重写
ReadBsonType
,并返回一个新的
currentbontype
并在那里提供一个转换后的值,然后重写每个可能类型的所有方法(
ReadDateTime()
ReadInt32()
ReadInt64()
ReadBinaryData()
等)并提供解析值

当JSON对象是普通对象时,这很好(尽管我发现它有点不可移植),但是如果它有具有相同名称属性的嵌套对象(我不想解析),那么问题就会出现

我尝试过重写
ReadStartArray()
ReadStartDocument()
等,并尝试构建一个可以查询的“路径”,但是
JsonReader
方法调用的实际顺序让我感到困惑(在检查属性名称之前,它似乎先检查类型,因此在检查类型时,
CurrentName
属性引用以前的属性,等等)

我用非常难看的代码在某种程度上规避了这一点……我确信,在不使用类映射的情况下,一定有更好的方法来实现这一点,尽管查找文档很困难(因为mongo经常将“json”称为实际的“json扩展”,所以文档从这里到那里是混合的)

有人发现自己处于这种情况吗

PS:在任何人询问之前,我正在将从第三方服务器返回的数据作为json字符串存储在mongo数据库上(稍后将对其进行挖掘),虽然有一些可用的数据类型模式(我可以对它们进行类映射),但将来可能会有新的模式,因此我不能只对所有内容进行类映射但是它们总是一样的,所以我宁愿从一开始就给它们正确的可能类型,而不是将所有内容作为字符串存储在mongo上

{ "Id": "039665be-a1a8-4062-97d6-e44fea2affff", "Foo":"Bar", "Baz":30 }