序列化Unit类的实例

时间:2011-03-23 19:06:10

标签: c# serialization

我正在尝试序列化这个类:

[Serializable()]
public class RadPaneSetting
{
    public string ID;
    public string ParentID;
    public Unit Height;
    public Unit Width;
    public bool Collapsed;
    public PanePositions PanePosition;
}

除了高度/宽度外,一切都写得很好。在序列化之前,我能够将Height视为Unit(400,UnitType.Pixel),但是它不会将其写入我的XML文件。

我的XML:

<Value>
  <RadPaneSetting xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <ID>RadPane_5c2c5136a0afaa4d65aa0adae5926751adf2</ID>
    <ParentID>RadDockSplitter_bc10266da61e0a4cb9a9814a0e94357d3d50</ParentID>
    <Height />
    <Width />
    <Collapsed>false</Collapsed>
    <PanePosition>Top</PanePosition>
  </RadPaneSetting>
</Value>

这是“单位”类型的已知问题吗?我在谷歌上找不到任何东西,我不希望这是一个问题,但我也无法想到任何根本原因。

编辑:RadPaneSetting存储在字典中。默认情况下,Dictionary不可序列化,但我实现了一个可序列化的字典。代码可以在这里找到:http://www.dacris.com/blog/2010/07/31/CSerializableDictionaryAWorkingExample.aspx

private void WriteDataToPath(string sessionName)
{
    string dataPath = string.Format(@"C:\{0}.txt", sessionName);

    var data = Session[sessionName];

    if (data != null)
    {
        if (!File.Exists(dataPath))
        {
            File.Create(dataPath).Close();
        }

        FileStream writer = File.OpenWrite(dataPath);

        XmlSerializer serializer = new XmlSerializer(data.GetType());
        serializer.Serialize(writer, data);

        writer.Close();
    }
}

1 个答案:

答案 0 :(得分:1)

您需要自己序列化该类型。像这样:

[XmlIgnore]
public Unit Height;

[XmlElement("Unit")]
public string HeightString
{
    get {return Height.ToString();}
    set {Height = Unit.Parse(value);}
}