2009-02-04 5 views
1

XAML에서 사용자 지정 컨트롤을 만들고 일부 사용자 지정 속성도 추가했습니다. 이제 가능한 경우 JSON에 직렬화하려고합니다. 여기에 내가 무엇을 (기본적으로)입니다 :Silverlight에서 파생 클래스를 직렬화하는 방법

public static string Serialize(object objectToSerialize) 
{ 
    using (MemoryStream ms = new MemoryStream()) 
    { 
     DataContractJsonSerializer serializer = 
      new DataContractJsonSerializer(objectToSerialize.GetType()); 
     serializer.WriteObject(ms, objectToSerialize); 
     ms.Position = 0; 
     using (StreamReader reader = new StreamReader(ms)) 
      return reader.ReadToEnd(); 
    } 
} 

그러나, serializer.WriteObject(ms, objectToSerialize);가 발생

System.Runtime.Serialization.InvalidDataContractException :

을 표시 고려

public partial class MyCustomClass : UserControl 
{ 
    public Dictionary<char, int[]> ValueMap; 
    public int Value { get; set; } 
} 

을 그리고 직렬화 처리하는 코드에 DataContractAttribute 특성 및 을 DataMemberAttribute 특성으로 직렬화하려는 모든 구성원을 표시하십시오. 또는, 유형을 공개하고 매개 변수가에게 생성자가 있는지 확인 할 수 있습니다 -.이 필요합니다 유형은 다음 연재됩니다 의 모든 공공 회원 및 없는 속성을 "

를 이제 때 MyCustomClass에 해당 속성을 추가하려면, 나는 물론 같은 예외 System.Windows.UIElement 대신 MyCustomClass 만이 시간을 얻을. 그래서

를, 내가해야 기존의 직렬화 방법으로 내 사용자 지정 파생 클래스를 직렬화하는 방법은 무엇입니까, 또는 그냥 사용자 정의 직렬화 메토 쓰기 ds에 MyCustomClass?

답변

3

여기서는 IXmlSerializable을 구현하는 것이 더 좋다고 생각합니다. 기본 클래스의 모든 내용을 무분별하게 직렬화하지 않으려 고합니다. (솔직히 말하면 믿을 수는 없습니다).

대신 IXmlSerializable을 MyCustomClass에 구현하면 DataContractJsonSerializer가 해당 구현을 사용하여 JSON에서 직렬화 할 수 있습니다.

+0

와우, 나는 결코 IXmlSerializable이 DataContractJsonSerializer에서 작동 할 것이라고 기대하지 않았지만 실제로는 그렇지 않습니다. 내가 처음 생각한 것은 ISerializable 이었지만 Silverlight에서는 지원되지 않는 것 같습니다. –

관련 문제