2015-01-01 4 views
1

설명하기 어려운 사람은 무엇이 잘못 되었습니까?XML에 대한 클래스의 직렬화가 공백 값을 남기고 있습니다.

클래스를 XML로 직렬화하려고하지만 속성 (클래스 내의 공용 클래스) 중 하나가 XML에 빈 값이 지정됩니다.

저는 XML로 직렬화 중이며 응용 프로그램의 클래스 onload로 deserialising하는 자체의 설정 클래스를 만듭니다.

저장 방법에 디버그 지점을 넣었으며 "ColourScheme"에는 값이 있지만 XML에서 공백으로 표시됩니다. 여기

public class SettingsModel 
{ 
    // DECLARE: Settings File Location 
    private static string SettingsFilePath = String.Format(@"{0}\{1}\{2}", Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Typhoeus BluePrint", "BluePrint_Settings.xml"); 

    // DECLARE: Public Settings 
    public DateTime LastUpdated = System.DateTime.Now; 
    public string StylesheetName = "style.css"; 
    public string WebPageName = "index.html"; 
    public string ProjectDirectory = String.Format(@"{0}\{1}\{2}", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "Typhoeus BluePrint", "Projects"); 
    public ColourSchemeClass ColourScheme = new ColourSchemeClass(); 

    public SettingsModel() 
    { 

    } 

    public void Save() 
    { 
     LastUpdated = System.DateTime.Now; 

     // DECLARE: File Stream Object 
     FileStream fs = new FileStream(SettingsFilePath, FileMode.OpenOrCreate); 

     // DECLARE: Serialisation Parameters 
     XmlSerializer ClassSerialiser = new XmlSerializer(typeof(SettingsModel)); 

     // SERIALISE: This Class to XML 
     ClassSerialiser.Serialize(fs, this); 

     // CLOSE: File Stream 
     fs.Close(); 
    } 
} 

다음은 ColourScheme 클래스를

public class ColourSchemeClass 
{ 
    #region Objects 

    // DECLARE: Colour Scheme Properties 
    public Color BaseColour = ColorTranslator.FromHtml("#1E1E1E"); 
    public Color HighlightColour = ColorTranslator.FromHtml("#414141"); 
    public Color SelectedColour = Color.White; 

    #endregion 
    #region Constructors 

    public ColourSchemeClass() 
    { 

    } 
    public ColourSchemeClass (Color Base, Color Highlight, Color Selected) 
    { 
     BaseColour = Base; 
     HighlightColour = Highlight; 
     SelectedColour = Selected; 
    } 

    #endregion 
} 

입니다 직렬화 후 XML이다. (내가 여기를 포맷 할 수없는 것 때문에 추출)

[ColourScheme] 
[BaseColour/] 
[HighlightColour/] 
[SelectedColour/] 
[/ColourScheme] 
+0

이를 참조하십시오 : 당신은 예를 들어, 각각의 컬러 속성에 대해 프록시 속성을 도입 할 필요가 http://stackoverflow.com/questions/376234/best-solution-for-xmlserializer-and-system-drawing- 색상 –

답변

1

Color는 불변 (더 세터)입니다 (오픈 대괄호와의 긴밀한 태그를 대체) 때문에 유용하게 XmlSerializer 직렬화 할 수 없습니다.

[XmlIgnore] 
    public Color BaseColour { get; set; } 

    [Browsable(false), EditorBrowsable(EditorBrowsableState.Never)] 
    [DebuggerBrowsable(DebuggerBrowsableState.Never)] 
    [XmlElement("BaseColour")] 
    public string XmlBaseColour 
    { 
     get 
     { 
      return ColorTranslator.ToHtml(BaseColour); 
     } 
     set 
     { 
      BaseColour = ColorTranslator.FromHtml(value); 
     } 
    } 
+0

고마워! 아픈 오늘 밤에 가자 :) –

+0

Genius, this worked! 고맙습니다. 나는 "immutable"이라는 단어가 무엇을 의미하는지 궁금해했다. :) –

관련 문제