如何为不属于我的 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。

更新:网站不再存在