从 ASP.NET Core 以字符串形式返回 ObjectID

Returning ObjectID as a string from ASP.NET Core

如何获得通过 ASP.NET 核心返回的 ObjectId 的字符串表示。

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

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

其中一个用户属性是 ObjectId 类型的 UserId

但是,这在响应中返回为

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

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

对于所有返回的 ObjectIds,有什么简单的方法可以做到这一点吗?

编辑 添加更多数据

这里是用户class。 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 写入 JSON 转换器。请检查下面的 link: