【发布时间】:2015-02-24 00:52:03
【问题描述】:
我一直在阅读 StackOverflow,但最终遇到了一些互联网似乎没有现成答案的东西。在发现 XMLSerializer 无法序列化字典后,我切换到 DataContractSerializer。问题是,无论我如何处理,序列化都会悄然失败。这是我要序列化的内容。它是高度简化的(我试图缩小问题的范围),但与更复杂的前辈一样患有同样的弊病:
[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);
}
在查看了 Stackoverflow 周围的类似问题(完全为空的输出,与我的不同)之后,我也尝试过这个:
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]标记你想要序列化的属性。
标签: c# xml serialization datacontractserializer