gpt4 book ai didi

c# - XmlSerializer 不可靠还是我做错了什么?

转载 作者:太空狗 更新时间:2023-10-30 01:26:34 24 4
gpt4 key购买 nike

如果你运行这段代码:

public class Program
{
public class MyClass
{
public string Text { get; set; }
}

static MyClass myClass = new MyClass();
static string Desktop = "C:\\Users\\Juan Luis\\Desktop\\";

static void Main(string[] args)
{
myClass.Text = "\r\nhello";
Console.WriteLine((int)myClass.Text[0]);
Save(Desktop + "file.xml", myClass);
myClass = Load(Desktop + "file.xml");
Console.WriteLine((int)myClass.Text[0]);
Console.Read();
}

private static MyClass Load(string fileName)
{
MyClass result = null;
using (Stream stream = File.Open(fileName, FileMode.Open))
{
XmlSerializer xmlFormatter = new XmlSerializer(typeof(MyClass));
result = (MyClass)xmlFormatter.Deserialize(stream);
}
return result;
}

private static void Save(string fileName, MyClass obj)
{
using (Stream tempFileStream = File.Create(fileName))
{
XmlSerializer xmlFormatter = new XmlSerializer(typeof(MyClass));
xmlFormatter.Serialize(tempFileStream, obj);
}
}
}

输出将为 13、10。XmlSerializer 正在删除回车。这在我的例子中是一个问题,因为我需要在一个被序列化和反序列化的类中比较字符串是否相等,这导致两个在序列化之前相等的字符串在序列化之后不相等。最好的解决方法是什么?

编辑:阅读答案后,这是我的解决方案,以防对任何人有帮助:

public class SafeXmlSerializer : XmlSerializer
{
public SafeXmlSerializer(Type type) : base(type) { }

public new void Serialize(Stream stream, object o)
{
XmlWriterSettings ws = new XmlWriterSettings();
ws.NewLineHandling = NewLineHandling.Entitize;

using (XmlWriter xmlWriter = XmlWriter.Create(stream, ws))
{
base.Serialize(xmlWriter, o);
}
}
}

最佳答案

我不会确切地说它不可靠:XmlSerializer 去除元素内文本周围的空白。如果它不这样做,那么 XML 文档的含义将根据您在 IDE 中格式化它们的方式而改变。

您可以考虑将文本放在 CDATA 部分中,这将准确保留内容。例如,How do you serialize a string as CDATA using XmlSerializer?

编辑:这看起来可以更好地解释问题所在,以及更简单的解决方案 - How to keep XmlSerializer from killing NewLines in Strings?

关于c# - XmlSerializer 不可靠还是我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4617754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com