我一直在閱讀StackOverflow,但終於遇到了互聯網似乎沒有現有答案的東西。在發現XMLSerializer無法序列化字典後,我切換到了DataContractSerializer。問題是,無論我如何處理它,序列化都悄然失敗。以下是我想要序列化的內容。它是高度簡化的(我試圖縮小問題關閉),但來自同一個弊病遭受其更爲複雜的祖先:DataContractSerializer生成沒有子節點的XML,不保留數據
[DataContract(Namespace = "")]
public class TestData
{
public Dictionary<Enum1, List<string>> List1 = new Dictionary<Enum1, List<string>>();
public DateTime WeekStarting { get; private set; }
public DateTime LastSaved { get; set; }
public int Iteration { get; set; }
public string FilePath { get; private set; }
public string FileName { get; private set; }
public TestData()
{
FilePath = "C:/";
FileName = "whatever.xml";
foreach (var category in Enum.GetValues(typeof(Enum1)).Cast<Enum1>())
{
List1.Add(category, new List<string>());
}
LastSaved = DateTime.Now;
WeekStarting = DateTime.Now;
Iteration = 0;
}
}
我最初使用此代碼序列化嘗試:
var serializer = new DataContractSerializer(typeof(TestData));
using (var writer = new XmlTextWriter(File.CreateText(Path.Combine(CurrentWeek.FilePath, CurrentWeek.FileName))))
{
writer.Formatting = Formatting.Indented;
serializer.WriteObject(writer, currentWeek);
}
看着周圍#2類似的問題(完全空輸出,不像我的)之後,我也試過這樣:
var serializer = new DataContractSerializer(typeof(TestData));
MemoryStream ms = new MemoryStream();
serializer.WriteObject(ms, CurrentWeek);
ms.Position = 0;
string serializedContent;
using (StreamReader sr = new StreamReader(ms))
{
serializedContent = sr.ReadToEnd();
}
這:
var serializer = new DataContractSerializer(typeof(TestData));
using (var sw = new StringWriter())
{
using (var writer = new XmlTextWriter(sw))
{
writer.Formatting = Formatting.Indented;
serializer.WriteObject(writer, CurrentWeek);
writer.Flush();
var xmlString = sw.ToString();
}
}
所有這一切,只生產含此XML文件:
<TestData xmlns:i="http://www.w3.org/2001/XMLSchema-instance" />
...它包含的東西的XML,但基本上是空的,因爲它沒有任何序列TESTDATA的內容。加載它並對其執行操作會在我的程序中導致各種不好的事情發生。當它有一個命名空間的時候事情並沒有好轉。有人有主意嗎?
標記您要序列化的屬性['[DataMember]'](https://msdn.microsoft.com/en-us/library/system.runtime.serialization.datamemberattribute%28v=vs.110%29的.aspx)。 – dbc 2015-02-24 00:58:49