2014-03-27 2 views
0

내가newtonsoft의 JSON 직렬화 사전

[DataContract(IsReference = true)] 
public abstract class Entity 
{ 
    [DataMember] 
    protected Dictionary<MyStruct, MyObject> MyDict; 

    ... 
} 

내가 직렬화 및 newtonsoft JSON을 사용하여 직렬화하려고 다음 클래스를 가지고, 직렬화 작동합니다. 그러나 deserializn에서 나는 다음과 같은 오류 메시지가 나타납니다. "문자열을 키 유형으로 변환하기 위해 TypeConverter를 만듭니다", 그리고 유형 변환기를 생성 할 때 deseializer가 호출하지 않습니다. 내가 JSON 시리얼이 아닌 객체로, 문자열로 키를 대하는 JSON 시리얼 라이저를

StringBuilder sb = new StringBuilder(); 
TextWriter text = new StringWriter(sb); 

var serializer = new JsonSerializer(); 
serializer.TypeNameHandling = TypeNameHandling.Auto; 

var inst = new Instance(); 
serializer.Serialize(text, inst); 

TextReader textReader = new StringReader(sb.ToString()); 
JsonReader reader = new JsonTextReader(textReader); 
var res = serializer.Deserialize(reader, typeof(Instance)); 
+1

더 많은 코드를 표시해야합니다. –

+0

위의 추가 방법은 serializer를 사용하는 방법입니다. –

답변

3

을 사용하는 방법

이입니다. 시리얼 라이저에는 다음과 같은 기능을 사용할 수 있습니다.

[JsonObject()] 
public class MyDictionaryType : Dictionary<MyStruct, MyObject> 
{ 
} 


[DataContract(IsReference = true)] 
public abstract class Entity 
{ 
    [DataMember] 
    protected MyDictionaryType MyDict; 

    ... 
}