는 방법 1.이 유래 된 객체가 Id
및 Ids
같은 구별 특성이있는 경우, 당신은 JObject
먼저 비교 한 다음 유형으로 만들 수 있습니다, 검색의 경우 JSON 계층
을 지속.
string collectionName = "YourCollectionName";
Guid id = Guid.Parse("275319a3-d395-46f2-9370-f3eadf691e03"); // Manually set GUID for test purpose.
Uri documentUri = UriFactory.CreateDocumentUri(DocumentDbDatabaseNameConfig, collectionName, id.ToString());
Uri collectionUri = UriFactory.CreateDocumentCollectionUri(DocumentDbDatabaseNameConfig, collectionName);
// test variables.
var list = new List<Items>();
list.Add(new SingleItemResponse() { Rating = 2.2d, Id = "id" });
list.Add(new MultipletemResponse() { Rating = 2.2d, Ids = new List<string>() { "ids1", "ids2"}});
JObject jInput = new JObject();
jInput.Add("id", id);
jInput.Add("list", JArray.FromObject(list));
// Store data.
var upsertedResult = _documentDbclient.UpsertDocumentAsync(collectionUri, jInput, null, true).Result;
// Read stored data.
var result = _documentDbclient.ReadDocumentAsync(documentUri).Result;
JObject jResult = (dynamic)result.Resource;
JArray jArray = (JArray) jResult["list"];
foreach (var jElement in jArray)
{
if (jElement["Id"] != null)
{
SingleItemResponse single = (SingleItemResponse)jElement.ToObject(typeof(SingleItemResponse));
// Do your job with single instance.
}
else if (jElement["Ids"] != null)
{
MultipletemResponse multiple = (MultipletemResponse)jElement.ToObject(typeof(MultipletemResponse));
// Do your job with multiple instance.
}
}
또한 삽입 된 데이터는 다음과 같습니다. 인라인 JSON 직렬화 된 문자열
이 방법에
{
"id": "275319a3-d395-46f2-9370-f3eadf691e03",
"list": [
{
"Id": "id",
"Rating": 2.2
},
{
"Ids": [
"ids1",
"ids2"
],
"Rating": 2.2
}
],
"_rid": "KywuAN7aNQABAAAAAAAAAA==",
"_self": "dbs/KywuAA==/colls/KywuAN7aNQA=/docs/KywuAN7aNQABAAAAAAAAAA==/",
"_etag": "\"0000ee05-0000-0000-0000-57ff9ecb0000\"",
"_attachments": "attachments/",
"_ts": 1476370121
}
방법 2 위기는 this post에서 힌트를 얻었다. 내 경험으로는 각 항목에 고유 한 유형이 포함 된 올바른 일련 번호로 된 결과를 만들 수 없습니다. 그러나 이론 상으로는 효과가있을 수 있습니다.
JObject jInput = new JObject();
// Use custom serialize/deserialize setting.
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.Auto
};
JArray jArray = JArray.FromObject(list);
string strJson = JsonConvert.SerializeObject(jArray, settings);
jInput.Add("id", id);
jInput.Add("strJson", strJson); // treat json just like strings.
var upsertedResult = _documentDbclient.UpsertDocumentAsync(collectionUri, jInput, null, true).Result;
var result = _documentDbclient.ReadDocumentAsync(documentUri).Result;
JObject jResult = (dynamic)result.Resource;
jResult.ToString().Dump();
List<Items> obj = JsonConvert.DeserializeObject<List<Items>>(jResult["strJson"].Value<string>(), settings);
당신은'별도로 DocDB의 항목을 _two_하는 _one_ DocumentDB 항목 또는 두 항목에서 단일 및 다중 항목을 포함 list'를 저장하는 의미? 내 대답이 당신의 문제를 지적하지 않는다면 나에게 의견을 적어주세요. – Youngjae
@Youngjae 첫 번째, 하나의 항목과 여러 항목을 포함하는 목록이지만 유형은 기본 유형 –
// 형식으로 설정할 수 있습니다. 확인 해봐. – Youngjae