mongodb 从ASP.NETCore返回作为字符串的ObjectID

hzbexzde  于 2023-05-28  发布在  Go
关注(0)|答案(2)|浏览(137)

如何获取通过ASP.NETCore返回的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);
}

这是我的repository中的方法:

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();
}
z2acfund

z2acfund1#

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

q3qa4bjr

q3qa4bjr2#

如果需要使用objectId的字符串表示形式,请尝试将字段的类型更改为首先使用字符串,如下所示

// [BsonId] // use if primary key is not Id
[BsonRepresentation(BsonType.ObjectId)]
public string? Id { get; set; }

相关问题