[英]How to serialize object to text WITH type info?
我想将对象序列化为文本,但是我想保留类型信息,以便在不引用类型对象的情况下反序列化。
XML序列化为我提供了我想要的文本,但没有保留类型信息。 我读到的有关二进制序列化的内容是,它保留类型信息,但不可读。 看起来SoapFormater可以满足我的要求,但是我不确定这是否合适。
我的目标是将序列化的字符串粘贴到字符串对象中,最终将其存储在数据库的列中(此操作目前不在我的控制范围内)。
例如,我有一个基类:
public class PluginSettings
{
private string name;
public string Name { ... }
}
每个插件都可以从中派生出自己的设置。
public class ACBPluginSettings : PluginSettings
{
private string mySetting;
...
}
我想出了可能的解决方案:使用BinaryFormatter,然后转换为Base64字符串。 这样就完成了工作,但它不是人类可读的。
甚至BinaryFormatter都返回一个对象(或实际上是对象图 ),您仍然需要将其转换为适当的类型。 从MSDN示例 :
BinaryFormatter formatter = new BinaryFormatter();
Hashtable addresses = (Hashtable) formatter.Deserialize(fs);
我想你想做些类似的事情:
CustomObject obj = new CustomObject();
formatter.Serialize(fs, obj);
var deserializedObj = formatter.Deserialize(source);
并有deserializedObj
类型化为CustomObject。 不幸的是,我不认为这是可能的(或者至少我想不出任何方法来实现它)。
that System.Runtime.Serialization.NetDataContractSerializer
can do what you're looking for. 我 System.Runtime.Serialization.NetDataContractSerializer
您的需求。
从MSDN:
NetDataContractSerializer在一个重要方面与DataContractSerializer有所不同: NetDataContractSerializer在序列化XML中包含CLR类型信息 ,而DataContractSerializer没有。 因此,仅当序列化和反序列化端共享相同的CLR类型时,才可以使用NetDataContractSerializer。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.