2016-12-27 3 views
1

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 はユーザークラスです。 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); 
} 

そして、これが私のリポジトリからの方法である:あなたが明示的に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(); 
} 
+0

ObjectIdはデフォルトで文字列にシリアル化する必要があります –

+0

明らかにそうではありません。私はここに特別なものは何も設定していませんが、これがサービスから戻ってくるものです。 –

+0

Idプロパティの.ToString()を明示的に実行してください。私が知る限り、.NET Coreは内部的にJSON.netを使用しています。文書、リポジトリ&サービスコードを共有できますか? –

答えて

2

。以下のリンクを確認してください: https://stackoverflow.com/a/37966098/887976

+0

これをASP.NET Coreに登録するには、ConfigureServicesメソッドに次の行を追加する必要があります: 'services.AddJsonOptions(opt => {opt.SerializerSettings.Converters.Add(new ObjectIdConverter());});' –

関連する問題