如何为不属于我的 MongoDB 集合创建 class?
How to create a class for a MongoDB collection that is not mine?
我是 MongoDB 的新手,遇到了一些问题。按照这里的简单指南 (http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver),但我连接到一个不是我亲自创建的数据库。因此,当示例包含以下内容时:
var collection = database.GetCollection<Entity>("entities");
它不适用于我正在连接的实际数据库,因为我没有 class。它充满了我无法猜测的类型..例如:
/* 0 */
{
"_id" : ObjectId("54f0f990cea606d49fafd5h2"),
"Time" : ISODate("2015-02-27T23:11:12.301Z"),
"Timecode" : "15:11:12:18",
"Round" : "1",
"FighterID" : 5,
"FighterName" : "John Doe",
"TypeID" : 1,
"Type" : "jab",
"HandID" : 2,
"Hand" : "left",
"Force" : 0.0,
"Velocity" : 8.0789527768068456,
"Confidence" : 67.689217510307827,
"ImpactType" : 1,
"FightID" : "fea5dc60-b898-11e4-ac68-a5f571ea05d9"
}
我不知道如何为它制作 class,因为 class 成员相当复杂。
我该怎么做?
我不知道如何从 mongodb 中创建 class 就像我们使用 EF 和 linq-to-sql.
我建议你做以下两件事之一,我相信第二个解决方案会更难但更接近你的要求
1) 尝试使用 bsonextractelements 属性来捕获所有复杂字段
public MyClass {
// fields and properties
[BsonExtraElements]
public BsonDocument CatchAll { get; set; }
}
或者,
2)使用反射并将属性名称以及每个 属性 的数据类型存储到 txt 文件中。然后创建你的 class manullay
这个问题的答案很晚,但我一直在使用 this website 为我生成 C# classes。
它通过解析提供给它的 JSON 数据并生成可用于反序列化所述 Json.
的相关 class(es) 来工作
在处理取自 MongoDB 的 json 时有几个问题:
它不处理 "ObjectId",如果你只是使用从 Mongo 中提取的 Json,那么当你点击生成时你会得到一个初始解析错误.
但是,您可以通过删除 "ObjectId" 前缀(和随附的括号)轻松解决此问题。
它不能很好地处理其中包含空格的 Json 字段名称,但它仍然会为您生成一个 class,您可以快速 "fix" 任何间隔字段
如果您有一个 Json 的集合,其中的字段数量不断变化(IE,一些文档包含 "Diety" 字段,但有些不包含),那么您需要粘贴一个 json 对象数组以确保生成的 class(es) 涵盖所有可能的组合
与上面一样,如果您有一些字段可以为空,除非您包含 Json 来说明这一点,否则解析器无法知道它应该接受空值,因此请确保您要么包含足够的示例来涵盖所有组合,要么准备好自己对生成的代码进行一些更改(例如在一些字段类型后添加问号;))
正如我所说 - 很晚才回答,但这个问题在 Google 中出现了很多次,所以我想我会添加这个,希望它能帮助以后的其他人
迟到的答案,但也许会对某人有所帮助。跳过了几个属性。
public class Entity
{
[BsonId]
public MongoDB.Bson.ObjectId _id { get; set; }
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("Time")]
public DateTime Time{ get; set; }
[BsonElement("Round")]
public string Round{ get; set; }
[BsonElement("Force")]
public double? Force{ get; set; }
[BsonElement("FightID")]
public string FightID{ get; set; }
}
甚至晚些时候参加聚会,但(受 Sk93 的回答启发)我发现 this website (http://bson2csharp.com/) 知道 MongoDB BSON。
更新:网站不再存在
我是 MongoDB 的新手,遇到了一些问题。按照这里的简单指南 (http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-csharp-driver),但我连接到一个不是我亲自创建的数据库。因此,当示例包含以下内容时:
var collection = database.GetCollection<Entity>("entities");
它不适用于我正在连接的实际数据库,因为我没有 class。它充满了我无法猜测的类型..例如:
/* 0 */
{
"_id" : ObjectId("54f0f990cea606d49fafd5h2"),
"Time" : ISODate("2015-02-27T23:11:12.301Z"),
"Timecode" : "15:11:12:18",
"Round" : "1",
"FighterID" : 5,
"FighterName" : "John Doe",
"TypeID" : 1,
"Type" : "jab",
"HandID" : 2,
"Hand" : "left",
"Force" : 0.0,
"Velocity" : 8.0789527768068456,
"Confidence" : 67.689217510307827,
"ImpactType" : 1,
"FightID" : "fea5dc60-b898-11e4-ac68-a5f571ea05d9"
}
我不知道如何为它制作 class,因为 class 成员相当复杂。
我该怎么做?
我不知道如何从 mongodb 中创建 class 就像我们使用 EF 和 linq-to-sql.
我建议你做以下两件事之一,我相信第二个解决方案会更难但更接近你的要求
1) 尝试使用 bsonextractelements 属性来捕获所有复杂字段
public MyClass {
// fields and properties
[BsonExtraElements]
public BsonDocument CatchAll { get; set; }
}
或者, 2)使用反射并将属性名称以及每个 属性 的数据类型存储到 txt 文件中。然后创建你的 class manullay
这个问题的答案很晚,但我一直在使用 this website 为我生成 C# classes。 它通过解析提供给它的 JSON 数据并生成可用于反序列化所述 Json.
的相关 class(es) 来工作在处理取自 MongoDB 的 json 时有几个问题:
它不处理 "ObjectId",如果你只是使用从 Mongo 中提取的 Json,那么当你点击生成时你会得到一个初始解析错误. 但是,您可以通过删除 "ObjectId" 前缀(和随附的括号)轻松解决此问题。
它不能很好地处理其中包含空格的 Json 字段名称,但它仍然会为您生成一个 class,您可以快速 "fix" 任何间隔字段
如果您有一个 Json 的集合,其中的字段数量不断变化(IE,一些文档包含 "Diety" 字段,但有些不包含),那么您需要粘贴一个 json 对象数组以确保生成的 class(es) 涵盖所有可能的组合
与上面一样,如果您有一些字段可以为空,除非您包含 Json 来说明这一点,否则解析器无法知道它应该接受空值,因此请确保您要么包含足够的示例来涵盖所有组合,要么准备好自己对生成的代码进行一些更改(例如在一些字段类型后添加问号;))
正如我所说 - 很晚才回答,但这个问题在 Google 中出现了很多次,所以我想我会添加这个,希望它能帮助以后的其他人
迟到的答案,但也许会对某人有所帮助。跳过了几个属性。
public class Entity
{
[BsonId]
public MongoDB.Bson.ObjectId _id { get; set; }
[BsonElement("id")]
public int Id { get; set; }
[BsonElement("Time")]
public DateTime Time{ get; set; }
[BsonElement("Round")]
public string Round{ get; set; }
[BsonElement("Force")]
public double? Force{ get; set; }
[BsonElement("FightID")]
public string FightID{ get; set; }
}
甚至晚些时候参加聚会,但(受 Sk93 的回答启发)我发现 this website (http://bson2csharp.com/) 知道 MongoDB BSON。
更新:网站不再存在