【发布时间】:2013-06-13 14:32:57
【问题描述】:
我附上了这段代码,它一直有效,就像一年一样:
// prepare serializer (XSContent)
XmlSerializer serializer = new XmlSerializer(typeof(XSContent));
using (TextWriter textWriter = new StreamWriter(this.fileName, false, Encoding.UTF8))
{
// prepare the content for xml serialization
XSContent content = new XSContent();
content.UserList = XSConverter.ConvertList<XSUser, TBSUser>(input.UserList);
content.GroupList = XSConverter.ConvertList<XSGroup, TBSGroup>(input.GroupList);
// perform serialization
serializer.Serialize(textWriter, content);
}
但是今天,我用大量数据测试的相同代码:xml 结果变得无效(请注意整个内容末尾的“剩余”):
<?xml version="1.0" encoding="utf-8"?>
<Content xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<UserList>
<User UserID="CI-0123">
{...}
</User>
{...}
</UserList>
<GroupList>
<Group GroupID="TEST01">
<GroupName>Test</GroupName>
<UserList>
<UserID>CI-0123</UserID>
</UserList>
</Group>
{...}
</GroupList>
</Content>rID>AT-TEST-2348</UserID>
<UserID>AT-TEST-2349</UserID>
<UserID>AT-TEST-2350</UserID>
这让我发疯,我被困住了。你觉得我应该去哪里找?我做错了什么?
也许值得一提的是,这个 xml 文件约为 200Mb。另外,如果有不清楚的地方,我可以提供更多信息。
EDIT1: 没有可能干扰的现有文件。文件在我的测试中创建为新文件!
EDIT2:
如果我在末尾添加一个textWriter.WriteLine("XYZ"),它会出现在</Content> 之后,但我仍然看到XYZ 之后的垃圾(例如:</Content>XYZ>AT-TEST-2348</UserID>)
EDIT3: 很奇怪,当我将缓冲区增加到 8192 时,它工作正常。之后,我又回到 4096 继续正常工作。我看到了这个FileOptions.SequencialScan,他们写道:“正确的操作仍然有保证”。好吧,我开始认为这可能有问题(?)
谢谢
【问题讨论】:
标签: .net xml serialization