gpt4 book ai didi

c# - Xml Deserializer 反序列化任何数据类型

转载 作者:太空宇宙 更新时间:2023-11-03 11:46:46 26 4
gpt4 key购买 nike

因为我还没有找到更好的方法来处理我的配置,所以我一直在使用 XmlSerializer 来序列化一个包含所有我想保存的东西的字典(稍后解释)。现在我变得更狡猾了,我开始构建更复杂的数据类型。唯一的问题是,现在当我序列化对象时,它会抛出一个错误,因为它不是原始数据类型。如果我为每个值创建一个新的序列化程序,那么我就无法加载该对象。有没有简单的方法解决这个问题?或者用于保存和加载任何数据类型的简单库。

可序列化字典。我正在使用 <string,object>对于 <T,S>

public void ReadXml (System.Xml.XmlReader reader)
{
try {
XmlSerializer deserializerKeys = new XmlSerializer( typeof(T) );
XmlSerializer deserializerValues = new XmlSerializer( typeof(S) );
reader.Read();
while (true) {
T key = (T)deserializerKeys.Deserialize(reader);
S val = (S)deserializerValues.Deserialize(reader); // fail :(
this.Add( key, val );
}
} catch ( Exception e ) {
Console.WriteLine( e.Message );
Console.WriteLine( e.StackTrace );
}
}


public void WriteXml (System.Xml.XmlWriter writer)
{
// ONE OF THE serializerValues is always commented out
// Im just showing the two ways I have done this
XmlSerializer serializerKeys = new XmlSerializer( typeof( T ) );
// this works for loading but not for saving >.>
XmlSerializer serializerValues = new XmlSerializer( typeof( S ) );
foreach ( KeyValuePair<T,S> pair in this ) {
// this way works with the saving but fails with loading
XmlSerializer serializerValues = new XmlSerializer(pair.Value.GetType());
serializerKeys.Serialize( writer, pair.Key );
serializerValues.Serialize( writer, pair.Value );
}
}

然后我有另一个派生自 List<SimpleRegex> 的类, 它包含所有 SimpleRegex对象和“选定的正则表达式”。 SimpleRegex只是一个包含更简单的正则表达式语法并提供与普通正则表达式相同的方法(匹配、替换等)的类。这样,普通人就可以使用它了。这RegexCollection (List<SimpleRegex>) 不是原始的。那是我的问题。基本上,我想做的就是保存和加载任何数据类型。

最佳答案

使用XML序列化有一些条件:

  • 不能序列化多维数组
  • 要序列化的类应该有一个不带任何参数的构造函数。

任何数据类型都不会被 XML Serializer 序列化...

使用Binary Serializer

public void SerializeObject(string filename, Object o)
{
Stream stream = File.Open(filename, FileMode.Create);
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, o);
stream.Close();
}

和二进制解串器

    public object DeserializeObject(string filename)
{
object o;
Stream stream = File.Open(filename, FileMode.Open);
BinaryFormatter bFormatter = new BinaryFormatter();
o = (ObjectToSerialize)bFormatter.Deserialize(stream);
stream.Close();
return o;
}

关于c# - Xml Deserializer 反序列化任何数据类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3209760/

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