J. *_*Doe 6 c# xml serialization
在分类并保存到文件时,有时会出现序列化输出如下所示的错误:
<?xml version="1.0"?>
<Template xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Route>Some Route</Route>
<TradePack>Something Here</TradePack>
<Transport />
</Template>te> ------> Notice this extra string?
Run Code Online (Sandbox Code Playgroud)
我正在序列化的类看起来像这样:
[Serializable]
public class Template
{
public string Route = string.Empty;
public string TradePack = string.Empty;
public string Transport = string.Empty;
public Template()
{
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚为什么会这样.这是我的序列化程序类:
public static bool Save(object obj, string path)
{
try
{
XmlSerializer writer = new XmlSerializer(obj.GetType());
using (var stream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
writer.Serialize(stream, obj);
}
return true;
}
catch { }
return false;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
附加输出可能是以前版本的输出文件(具有相同名称)的剩余部分.
您可以通过将FileMode
from 更改OpenOrCreate
为Create
only 来解决问题.这样输出文件如果已经存在则被截断.
一个更简单的方法是使用File.Create(path)
:
XmlSerializer writer = new XmlSerializer(obj.GetType());
using (var stream = File.Create(path))
{
writer.Serialize(stream, obj);
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句:通常最好只让异常冒泡调用堆栈,直到你可以对它们做一些有意义的事情.只是默默地吞下异常,而是返回一个可能永远不会被检查的状态标志隐藏实际问题,可能会导致以后的进一步问题并使问题分析变得不必要地困难.
归档时间: |
|
查看次数: |
138 次 |
最近记录: |