전체 오류를 역 직렬화 할 수 없습니다현재 JSON object..into 유형 'System.Collections.Generic.List`1 [선택 System.String]'
현재 JSON 객체 (예 : { "이름"을 역 직렬화 할 수 없습니다 : 타입이 JSON 배열 (예 : [1,2,3])을 필요로하기 때문에 을 deserialize하기 때문에 'System.Collections.Generic.List`1 [System.String]'유형으로 변환됩니다. 이 오류를 수정하려면 JSON 배열을 (예 : [1,2,3])으로 변경하거나 deserialized 유형을 일반 .NET 유형 (예 : 정수가 아닌 컬렉션과 같은 원시 유형이 아닌)으로 변경하십시오. 배열 또는 List와 같은 유형)은 JSON 객체에서 직렬화 될 수 있습니다. JsonObjectAttribute를 유형에 추가하여 이 JSON 객체에서 역 직렬화되도록 할 수도 있습니다. 잘 작동 하나 거기에 경로 'CEC1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4', 2 호선, 코드의이 비트 전에 위치 (42)
, ...
var highlighting = JsonConvert.DeserializeObject<Object>(jsonDeserialized["highlighting"].ToString());
이 우리를 제공합니다 Google 검색 엔진의 일부 데이터 :
{\r\n "C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4": {\r\n "Title_fr":
[\r\n "<em>Chris</em> <em>Cep</em>"\r\n ]\r\n } ,\r\n
"874BE5B1-FAA0-463F-98DD-8532D4D80178": {\r\n "Content_fr": [\r\n
" <em>Chris</em> <em>Cep</em>, Ctifl \n\n9 Info - Tgif/
January - February 2001\n\nThe Tgif on the Net\nInquire"\r\n
]\r\n } ,\r\n "44FA5B99-9472-499C-9827-646A511068DA": {\r\n
"Content_fr": [\r\n " S\n\nHorti\nThe
database\ndocument\n<em>Chris</em> <em>Cep</em>, Iso
Rever,\nJeane Samuel"\r\n ]\r\n } \r\n}
//formatted - http://jsonblob.com/53d24a78e4b0ed12c5a6b1df
{
"C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4": {
"Title_fr": [
"<em>Chris</em> <em>Cep</em>"
]
},
"874BE5B1-FAA0-463F-98DD-8532D4D80178": {
"Content_fr": [
" <em>Chris</em> <em>Cep</em>, Ctifl \n\n9 Info - Tgif/ January - February 2001\n\nThe Tgif on the Net\nInquire"
]
},
"44FA5B99-9472-499C-9827-646A511068DA": {
"Content_fr": [
" S\n\nHorti\nThe database\ndocument\n<em>Chris</em> <em>Cep</em>, Iso Rever,\nJeane Samuel"
]
}
}
아래의 세 가지 개체는 모두 다르게 명명 된 것입니다. 나는. 나는 그 노드의 이름이 C6C1B0C9-A87A-4A9E-A017-AEFC3CEDCBD4
같은 GUID이기 때문에 JsonConvert.DeserializeObject<List<string>>(jsonDeserialized["highlighting"]["CAN'T-REFERENCE-ANYTHING-HERE"].ToString())
을 할 수 없다.
저는 아직 JSON에서 친환경적입니다. 여기서 무엇을 놓치고 있습니까? 어떤 종류의 목록 <>에 "강조 표시"할 때 세 객체를 어떻게 얻을 수 있습니까?
내 솔루션 :
private class Highlighters //defined elsewhere
{
public string IdGlobal;
public string FieldName;
public string FieldValue;
}
var highlighters = new List<Highlighters>();
var allHighlights = JsonConvert.DeserializeObject<IDictionary<string, object>>(jsonDeserialized["highlighting"].ToString());
foreach (var entry in allHighlights)
{
string guid = entry.Key;
string j = entry.Value.ToString();
var insideEntry = JsonConvert.DeserializeObject<IDictionary<string, object>>(j);
foreach (var h in insideEntry)
{
string highlightedField = h.Key;
string highlightedValue = h.Value.ToString().Substring(1, h.Value.ToString().LastIndexOf("]") - 1).Trim().Trim('"').Trim();//a little cleaning
highlighters.Add(new Highlighters{IdGlobal=guid, FieldName = highlightedField, FieldValue = highlightedValue});
}
}
고마워요. 그게 제가 끝내었던 것입니다. (하지만 GUID도 필요합니다) - 위의 편집. –