C# XML Serialization序列化成字符串含有65279

遇到C# XML Serialization序列化成字符串含有65279问题。解决方案如下...

这行是最重要的

 
Encoding = new UTF8Encoding(false), // Disable to provide a Unicode byte order mark
 
附完整代码:
 
 
 
 
public interface IXmlFileSerializer
{
    void Serialize<T>(object obj, string filePath);
 
    T Deserialize<T>(string filePath);
}

 
public interface IXmlStringSerializer
{
    string Serialize<T>(object obj);
 
    T Deserialize<T>(string xmlString);
}

 
public class XmlFileSerializer : IXmlFileSerializer
{
    private readonly IXmlStringSerializer _xmlStringSerializer;
 
    public XmlFileSerializer()
        : this(new XmlStringSerializer())
    { }
 
    public XmlFileSerializer(IXmlStringSerializer xmlStringSerializer)
    {
        if (xmlStringSerializer == null)
            throw new ArgumentNullException("xmlStringSerializer");
 
        _xmlStringSerializer = xmlStringSerializer;
    }
 
    public void Serialize<T>(object obj, string filePath)
    {
        var xmlString = _xmlStringSerializer.Serialize<T>(obj);
        File.WriteAllText(filePath, xmlString);
    }
 
    public T Deserialize<T>(string filePath)
    {
        if (!File.Exists(filePath))
            throw new FileNotFoundException(string.Format("The file '{0}' doesn't exist", filePath));
 
        var xmlString = File.ReadAllText(filePath);
 
        return _xmlStringSerializer.Deserialize<T>(xmlString);
    }
}

 
public class XmlStringSerializer : IXmlStringSerializer
{
    public string Serialize<T>(object obj)
    {
        var type = typeof(T);
 
        if (obj.GetType() != type)
            throw new Exception("The object to serialize is not with expected type.");
 
        using (var stream = new MemoryStream())
        {
            var writer = CreateXmlWriter(stream);
            var serializer = new XmlSerializer(type);
            serializer.Serialize(writer, obj, CreateXmlSerializerNamespaces());
            return Encoding.UTF8.GetString(stream.ToArray());
        }
    }
 
    private static XmlWriter CreateXmlWriter(Stream stream)
    {
        var settings = new XmlWriterSettings
        {
            Encoding = new UTF8Encoding(encoderShouldEmitUTF8Identifier: false),
            Indent = true
        };
        return XmlWriter.Create(stream, settings);
    }
 
    private static XmlSerializerNamespaces CreateXmlSerializerNamespaces()
    {
        var namespaces = new XmlSerializerNamespaces();
        namespaces.Add(string.Empty, string.Empty);
        return namespaces;
    }
 
    public T Deserialize<T>(string xmlString)
    {
        using (var reader = new StringReader(xmlString))
        {
            var type = typeof(T);
            var serializer = new XmlSerializer(type);
            return (T)serializer.Deserialize(reader);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值