MongoDB C#Bson表示一个ObjectIds数组

时间:2012-05-28 08:22:37

标签: c# mongodb asp.net-mvc-4 asp.net-web-api mongodb-.net-driver

我有这样的文件计划:

{
  "_id" : ObjectId("4fbb728d80db260988580e05"),
  "titleFull" : "Foo, Inc",
  "titleShort" : "Foo",
  "countries" : [
     ObjectId("4fba04ef80db260988f8b607"),
     ObjectId("4fba05f880db260988cd5cfd") ],
  "type" : "company"
}

ASP.NET MVC 4 Web API项目中的这类:

public class Company
{
  [BsonRepresentation(BsonType.ObjectId)]
  public String id { get; set; }
  public String titleFull { get; set; }
  public String titleShort { get; set; }
  //[BsonRepresentation(BsonType.ObjectId)]
  //public String[] countries { get; set; } — not working
  public ObjectId[] countries { get; set; }
  public String type { get; set; }
}

当我在/api/countries发送GET请求时,我收到了JSON文档(它是mvc反序列化):

{
  "id": "4fba097e80db2609886ce7f2",
  "titleFull": "Foo, LLC",
  "titleShort": "Foo",
  "countries": [
    {
      "_increment": 16299527
      "_machine": 8444710
      "_pid": 2440
      "_timestamp": 1337591023
    },
    {
      "_increment": 13458685
      "_machine": 8444710
      "_pid": 2440
      "_timestamp": 1337591288
    }
  ],
  "type": "company"
}

有没有办法像这样做JSON响应:

{
  "id": "4fba097e80db2609886ce7f2",
  "titleFull": "Foo, LLC",
  "titleShort": "Foo",
  "countries": ["4fba04ef80db260988f8b607","4fba05f880db260988cd5cfd"],
  "type": "company"
}

2 个答案:

答案 0 :(得分:3)

未来读者注意

Rober Stam在谷歌小组写道:

  

反序列化代码中存在错误。在数组的情况下,[BsonRepresentation]属性实际上应用于项而不是数组。

     

我为此创建了一张JIRA票:

     

https://jira.mongodb.org/browse/CSHARP-479

因此,如果您遇到同样的问题,请跟踪此票。

答案 1 :(得分:0)

在响应中而不是使用ObjectId for Countries使用字符串数组并添加要在json响应中传递的ID。

public string [] countries {get;组; }

如果你这样使用,json

中的响应会是这样的

“countries”:[“4fba04ef80db260988f8b607”,“4fba05f880db260988cd5cfd”],

您正在使用id字段中的字符串。