2016-12-27 5 views
1

ObjectId 문자열 표현을 ASP.NET 코어를 통해 반환하는 방법. 사용자 속성의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?

편집 추가 좀 더 많은 데이터

다음은 사용자 클래스입니다. 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입니다. 당신은 명시 적으로 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는 기본적으로 문자열로 serialize되어야합니다. –

+0

명백하게 아닙니다. 나는 여기에 특별한 것을 설정하지 않았지만 이것은 내가 봉사에서 얻은 것입니다. –

+0

.ToString() Id 속성에 명시 적으로 수행하십시오. 내가 아는 한 .NET Core는 내부적으로 JSON.net을 사용하여이를 처리해야한다. 귀하의 문서, 저장소 및 서비스 코드를 공유 할 수 있습니까? –

답변

2

:

[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); 
} 

는 그리고 이것은 내 저장소에서 방법이다. 아래 링크를 확인하십시오. https://stackoverflow.com/a/37966098/887976

+0

ASP.NET 코어에 이것을 등록하려면 ConfigureServices 메서드에 다음을 추가해야합니다 :'services.AddJsonOptions (opt => {opt.SerializerSettings.Converters.Add (new ObjectIdConverter());});' –