繁体   English   中英

如何使用类型信息将对象序列化为文本?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM