2013-11-27 5 views
1

이 주제에 대한 연구를 수행하고 있으며 내 사전을 KeyValuePair 개체의 컬렉션으로 변경하는 것 외에 다음과 같은 경우에 대한 솔루션을 찾을 수 없었습니다.중첩 된 사전을 serialize/deserialize하는 Json.NET

Client라는 매우 간단한 모델이 있습니다.이 모델은 사전 중 하나 인 사전을 가지고 있으며 마지막으로 사전 모델을 직렬화 및 비 직렬화하려고합니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Newtonsoft.Json; 

namespace Automation 
{ 
public class Client 
{ 
    public Client(IList<String> environments) 
    { 
     this.Environments = new Dictionary<String, Boolean>(); 
     if (environments != null) 
      foreach (String environment in environments) 
       this.Environments[environment] = false; 
    } 

    public Dictionary<String, Boolean> Environments { get; set; } 
} 

public static class TestClass 
{ 
    public static void Serializer() 
    { 
     Dictionary<String, Client> newDict = new Dictionary<String, Client>(); 
     newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" }); 
     newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" }); 
     newDict[Guid.NewGuid().ToString()] = new Client(new List<String>() { "A", "B" }); 

     string json = JsonConvert.SerializeObject(newDict, Formatting.Indented); 
     try 
     { 
      Dictionary<String, Client> obj = JsonConvert.DeserializeObject<Dictionary<String, Client>>(json); 
     } 
     catch 
     { 
     } 
    } 
} 

}이 생성됩니다 json으로입니다

: 여기

내 코드입니다

{ 
"246af598-89b3-4198-b2cb-9f2d8fe6e03e": { 
"Environments": { 
    "A": false, 
    "B": false 
    } 
}, 
"fc43bb8d-65d3-4a97-86f3-cb67567845bd": { 
"Environments": { 
    "A": false, 
    "B": false 
    } 
}, 
"90c0158a-69e2-42b0-9072-e695c94a2f7a": { 
"Environments": { 
    "A": false, 
    "B": false 
    } 
} 
} 

가 여기에 역 직렬화 할 때 나는 점점 오전 예외 :

th를 역 직렬화 할 수 없습니다. 현재 JSON 객체 (예 : 유형에 JSON 배열 (예 : [1,2,3])이 필요하기 때문에 유형을 'System.Collections.Generic.IList`1 [System.String]'으로 변경해야합니다 (예 : { "name": "value"}). 이 오류를 수정하려면 JSON 배열을 JSON 배열 (예 : [1,2,3])로 변경하거나 deserialized 형식을 일반 .NET 유형 (예 : 정수와 같은 기본 유형이 아니라 콜렉션 유형 JSON 객체에서 역 직렬화 할 수있는 배열 또는 목록). JsonObjectAttribute를 유형에 추가하여 강제로 JSON 객체에서 역 직렬화 할 수도 있습니다. 경로 '246af598-89b3-4198-b2cb-9f2d8fe6e03e.Environments.A', 4 호선, 위치 (11)

어떤 생각, 결국 나는 SignalR 요청을 통해 유선으로 직렬화 객체를 전송됩니다.

답변

1

그냥 작업을 탈 직렬화에 대한 기본 생성자를 소개 감사합니다

public class Client 
{ 
    public Client() 
    { } 

    // your other constructor ... 
} 
+0

확실히 그것을 않았다! 무리 감사! – Paul

관련 문제