2017-11-21 9 views
0

MongoDB .net 드라이버를 사용하는 .Net Core 2.0 웹 API가 있습니다. 어떤 이유로웹 API + MongoDB : 임의의 객체 목록?

{ 
    "listName": "test", 
    "MetaData": [{ 
     "Name": "Text", 
     "FieldType": "TextBox", 
     "isActive": 1 
    }] 
} 

: 절약에 대한

public class ListOfValues 
{ 
    public string ListName { get; set; } 
    public List<object> MetaData { get; set; } 
} 

내 컨트롤러의 엔드 포인트는 다음과 같습니다 :

public class LovController : Controller 
{ 
    [HttpPost] 
    public async Task<IActionResult> Create([FromBody] ListOfValues lov) 
    { 
     if (!ModelState.IsValid) 
      return BadRequest(); 

     await ldbContext.GetCollection<ListOfValues>("ListOfValues").InsertOneAsync(lov); 
     return CreatedAtAction("Create", new { Id = lov.Id }); 
    } 
} 

내가이 데이터를 게시하도록하겠습니다

나는 ListOfValues라는 클래스가 DB에 쿼리하면이 값이 표시됩니다.

{ 
    "_id" : ObjectId("5a1421e644d7cb07a8d3c45d"), 
    "ListName" : "test", 
    "MetaData" : [ 
     { 
      "_t" : "Newtonsoft.Json.Linq.JObject, Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed", 
      "_v" : { 
       "Name" : { 
        "_t" : "JValue", 
        "_v" : [] 
       }, 
       "FieldType" : { 
        "_t" : "JValue", 
        "_v" : [] 
       }, 
       "isActive" : { 
        "_t" : "JValue", 
        "_v" : [] 
       } 
      } 
     } 
    ] 
} 

클래스 나 구조체와 같은 지정된 형식의 목록을 사용하면 클라이언트가 보낼 수있는 개체를 알 수 없으므로 목록이 동적 개체 여야합니다.

DB에 저장된 데이터를 읽을 수있게하려면 어떻게해야합니까?

+0

메타 데이터 클래스의 예를 C#으로 추가 할 수 있습니까? 문제는 Newtonsoft.Json과 관련이 있습니다. MongoDB 드라이버와 아무 관련이 없습니다. –

+0

메타 데이터 속성에 대한 클래스가 없습니다. 클라이언트가 전송하는 동적 인 JSON 배열 인 것으로 가정합니다. Newtonsoft.Json에 대한 참조가 없기 때문에 코드에 왜 나타나는지 모르겠습니다. –

+0

아, 알겠습니다. 따라서 DB의 데이터를 요청과 똑같이 보길 원합니다. –

답변

2

알려지지 않은 구조의 데이터를 나타내려면 Dictionary<string, object>을 사용하십시오.

이 기능은 ASP.NET 웹 API의 기본 serializer 인 Newtonsoft.Json과 MongoDB.Driver의 BSON serializer와 함께 작동합니다.

변경 ListOfValues 클래스는 다음과 같이

public class ListOfValues 
{ 
    [JsonIgnore] 
    public ObjectId Id { get; set; } 

    public string ListName { get; set; } 

    public List<Dictionary<string,object>> MetaData { get; set; } 
} 

Id 속성이 DB에서 데이터를 가져 오기 위해 필요합니다. JsonIgnore 속성을 사용하면 컨트롤러가 반환하거나받은 JSON에 표시되지 않습니다.

와 테스트 :

  • ASP.NET 코어 2.0 웹 API
  • Newtonsoft.Json 10.0.3
  • MongoDB.Driver 2.4.4
  • MongoDB를 서버 3.4 WiredTiger 승/
+0

너무 간단하고 분명해서 나는 그것을 어떻게 놓쳤는 지 모른다. 그러나 MongoDB 매뉴얼에서 MongoDB C# 드라이버 - [CSharp 드라이버로 문서 일련 화] (https : //mongodb-documentation.readthedocs)와 관련하여 알아야 할 많은 흥미로운 자료를 다루는 유용한 링크를 발견했습니다. .io/en/latest/ecosystem/tutorial/serialize-documents-with-the-csharp-driver.html) –