XML Serialization最后生成随机字符串? C#

前端之家收集整理的这篇文章主要介绍了XML Serialization最后生成随机字符串? C#前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > FileMode.Open and FileMode.OpenOrCreate difference when file exists? c# bug?1个
分类并保存到文件时,有时会出现序列化输出如下所示的错误
<?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?

我正在序列化的类看起来像这样:

[Serializable]
public class Template
{
    public string Route = string.Empty;
    public string TradePack = string.Empty;
    public string Transport = string.Empty;

    public Template()
    {

    }
}

我似乎无法弄清楚为什么会这样.这是我的序列化程序类:

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;
    }

谢谢!

附加输出可能是以前版本的输出文件(具有相同名称)的剩余部分.

您可以通过将OpenOrCreate更改为仅限创建来解决此问题.这样输出文件如果已经存在则被截断.

更简单的方法是使用File.Create(path):

XmlSerializer writer = new XmlSerializer(obj.GetType());
using (var stream = File.Create(path))
{
    writer.Serialize(stream,obj);
}

顺便说一句:通常最好只让异常冒泡调用堆栈,直到你可以对它们做一些有意义的事情.只是默默地吞下异常,而是返回一个可能永远不会被检查的状态标志隐藏实际问题,可能会导致以后的进一步问题并使问题分析变得不必要地困难.

猜你在找的XML相关文章