【问题标题】:Returning ObjectID as a string from ASP.NET Core从 ASP.NET Core 将 ObjectID 作为字符串返回
【发布时间】:2016-12-27 22:04:41
【问题描述】:

如何获得通过 ASP.NET Core 返回的 ObjectId 的字符串表示形式。

我的控制器中有以下操作结果:

return new ObjectResult(new { session, user });

其中一个用户属性是UserId,它属于ObjectId 类型。

但是,这会在响应中返回为

"id": {
  "timestamp": 1482840000,
  "machine": 6645569,
  "pid": 19448,
  "increment": 5052063,
  "creationTime": "2016-12-27T12:00:00Z"
}

我希望响应只是58625d5201c4f202609fc5f3,这是相同结构的字符串表示形式。

是否有任何简单的方法可以为所有返回的ObjectIds 执行此操作?

编辑 添加更多数据

这里是用户类。 ObjectIdMongoDB.Bson.ObjectId

public class User
{
    public ObjectId Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public string PasswordHash { get; set; }
    public string PasswordSalt { get; set; }
}

我的控制器中的 get 方法。 ControllerMicrosoft.AspNetCore.Mvc.Controller

[HttpGet("{id}", Name = "GetUser")]
public async Task<IActionResult> Get(ObjectId id)
{
    var user = await _repository.GetOne<User>(id);
    if (user == null) return NotFound();
    return new ObjectResult(user);
}

这是我存储库中的方法:

public async Task<T> GetOne<T>(ObjectId id)
{
    var collectionname = typeof(T).Name;
    var collection = _database.GetCollection<T>(collectionname);
    var filter = Builders<T>.Filter.Eq("_id", id);
    var result = await collection.Find(filter).ToListAsync();
    return result.FirstOrDefault();
}

【问题讨论】:

  • ObjectId 默认序列化为字符串
  • 显然不是。我在这里没有设置任何特别的东西,但这是我从服务中得到的。
  • 尝试明确地对 Id 属性执行 .ToString() 。据我所知,.NET Core 在内部使用 JSON.net 应该已经处理好了。你能分享你的文档、存储库和服务代码吗?
  • 我现在在我的帖子中添加了更多信息。但是手动 ToString 对我来说不是解决方案,因为它是返回对象的一部分,并且对于所有具有 objectid 的对象来说,这个问题都是一样的,我不想到处添加随机 ToString 调用。
  • 你不使用 BSON 库??我的意思是 mongo db 的 json 解析器,它在内部处理 objectId 的序列化。 mongodb.github.io/mongo-csharp-driver/2.2/reference/bson/…

标签: mongodb asp.net-core objectid


【解决方案1】:

您必须将 ObjectID 显式写入 JSON 转换器。请检查以下链接: https://stackoverflow.com/a/37966098/887976

【讨论】:

  • 请注意,要在 ASP.NET Core 中注册它,您必须在 ConfigureServices 方法中添加以下内容:services.AddJsonOptions(opt =&gt; {opt.SerializerSettings.Converters.Add(new ObjectIdConverter());});
猜你喜欢
  • 2018-09-28
  • 2018-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-26
  • 2010-12-04
  • 2018-06-25
  • 2018-03-21
  • 1970-01-01
相关资源
最近更新 更多