2016-07-08 6 views
1

는이 같은 C#에서 유효하지 않은 식별자가있는 JSON 문자열 (내가 작성되지 않음)이 있습니다이런 종류의 JSON을 직렬화하려면 어떻게해야합니까?

"OBSBasic.SelectScene": [], 
"libobs.hide_scene_item.Captura de Janela": [], 

"push-to-mute-delay": 0, 

과에 아들을 ...

here's 완전한 아들.

내 질문은 : 나는 그것을 좋아 할 수 있도록

가 어떻게 사전의 일종으로 그 JSON 변환 할 수 있습니다 : 나는 확실히 모든 가능한 속성 이름을 모르는

dic["sources"][0]["settings"]["window"] = "XXXX"; 

을 그 JSON 파일을 가질 수 있으므로 배열 기반 접근 방식으로 변환하여 키 ()에서 액세스 할 수 있습니다. 대신 새 속성이 있으면 deserialize하는 데 사용 된 개체 이름을 사용하는 것이 좋습니다. 생성됩니다.

는이 같은 성공 뭔가없이 시도 :

예외가 throw : 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'을 Microsoft.CSharp에서 런타임 예외 결과

dynamic data = JsonConvert.DeserializeObject(jsonstr); 
data.sources.settings.window = "xxxx"; 

.dll Throw 예외 : 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'in System.Core.dll

나는 사전이 DeserializeObject<T>() 방법으로 전달되는 것과 같이 보일 것 같을 때 bcause를 보여줄 코드가 없습니다. 그 JSON 객체를 나중에 문자열로 직렬화하고 싶습니다.

+0

? 질문을 수정하십시오. –

+0

'dic [ "sources"] [ "settings"] [ "window"] = "XXXX";'- sources는 배열이 아니라 사전입니다. 'dic [sources "] [0] ["settings "] ["window "] ="XXXX ";"AFAIK와 같은 것이 필요합니다. – yaakov

+0

@EliArbel 님이 – Jack

답변

1

당신이 JToken로 JSON을 구문 분석하는 경우 당신은 당신의 데이터에 액세스 할 구문을 사용할 수 있습니다 :

JToken dic = JToken.Parse(json); 

    Console.WriteLine(dic["sources"][1]["settings"]["window"]); 

바이올린 : 예외가 무엇인지 https://dotnetfiddle.net/jZrI44

+0

잘 처리되었으므로;) – Jack

관련 문제