ASP.NETコア経由で返されたObjectId
の文字列表現を取得する方法。ユーザープロパティのASP.NETコアからObjectIDを返す
return new ObjectResult(new { session, user });
一つはObjectId
型であるUserId
次のとおりです。
は、私は私のコントローラ内のアクションの次の結果を持っています。
しかし、これは私が応答が単純に同じ構造の文字列表現である58625d5201c4f202609fc5f3
をようにしたいと思い
"id": {
"timestamp": 1482840000,
"machine": 6645569,
"pid": 19448,
"increment": 5052063,
"creationTime": "2016-12-27T12:00:00Z"
}
として応答で返されます。
ObjectIds
の返信でこれを行う簡単な方法はありますか?ここではいくつかのより多くのデータに
を追加
EDIT はユーザークラスです。 ObjectId
はMongoDB.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メソッドです。 Controller
はMicrosoft.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);
}
そして、これが私のリポジトリからの方法である:あなたが明示的にJSONコンバータへのObjectIDを記述する必要が
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を使用しています。文書、リポジトリ&サービスコードを共有できますか? –