我一直在阅读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