.NET是否有标准的简单字符串反序列化接口/模式?

时间:2011-02-08 17:10:42

标签: c# .net serialization

我可以很容易地编写一个,但我想知道框架中是否已经有一个标准的字符串反序列化接口或模式,它根据字符串创建/填充对象。

基本上我想要与ToString()相反。每个对象都支持ToString(),这很方便,但如果我可以走另一条路,并且实际上(重新)从该字符串创建一个对象,那将是很好的。显然这对所有对象都不可能,但那没关系。

我查看了ISerializable,但是它很复杂(有Seri​​alizationInfos和StreamingContexts以及各种无意义的东西),应该是一个核心功能,imo。我想象的是这样的事情:

public interface IDeserializable {
    void Deserialize( string data );
}

进一步思考,如果我可以将字符串传递给构造函数,那将是很好的(并且与ToString更加对称),但是我无法使用接口来表示它。我必须对类型使用反射并检查接受单个字符串的构造函数,并使用反射来实例化它。

5 个答案:

答案 0 :(得分:2)

作为TryParse的反射/类型友好替代方案:

var conv = TypeDescriptor.GetConverter(type);
object value = conv.ConvertFromInvariantString(s);

答案 1 :(得分:1)

许多类型都支持TryParse方法。 http://social.msdn.microsoft.com/Search/en-us?query=tryparse

答案 2 :(得分:1)

是。感谢Reflection,它可以序列化/反序列化几乎任何对象。

http://msdn.microsoft.com/en-us/library/7ay27kt9(v=VS.100).aspx

ToString也不是SERIALIZATION。它唯一简化的文字表示。在大多数情况下,它只返回类型的名称。

编辑:好的XML是字符串。您可以使用二进制序列化并使用Base64编码进行保存。问题是,如果您希望序列化时保持人类可读。

答案 3 :(得分:0)

您想使用DataContract序列化程序或NewtonSoft Json / Bson序列化程序。

答案 4 :(得分:0)

不,没有内置的方法可以做到这一点。不能期望ToString()产生具有足够信息来反序列化的东西,因为这不是它的预期目的。 Object.ToString()的默认版本实际上为您提供了 nothing ,可用于反序列化某些内容。它只适用于以这种方式专门实现ToString()的类,在这种情况下,使用其他方法接口并且不依赖于ToString()(SerializeString()或其他东西)更有意义。

最接近的是XML Serializer,或者已经提到过的DataContractSerializer。