我正在尝试序列化这个类:
[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();
}
}
答案 0 :(得分:1)
您需要自己序列化该类型。像这样:
[XmlIgnore]
public Unit Height;
[XmlElement("Unit")]
public string HeightString
{
get {return Height.ToString();}
set {Height = Unit.Parse(value);}
}