我有一堂课,里面有一些我正在序列化的数据:
[Serializable]
public class SomeData {
public int NumericField;
public string StringField;
}
我有一个很好的方便的扩展方法:
public static string ToJson<T> (this T value) {
// yay no compile-time checks for [Serializable]?
if (!typeof(T).IsSerializable)
throw new SerializationException("Object lacks [Serializable] attribute");
var serializer = new DataContractJsonSerializer(typeof(T));
using (var stream = new MemoryStream()) {
using (var writer = JsonReaderWriterFactory.CreateJsonWriter(stream, Encoding.UTF8)) {
serializer.WriteObject(writer, value);
}
return Encoding.UTF8.GetString(stream.ToArray());
}
}
我真的更希望我的类SomeData
实现了ISerializable
,但是当我添加它时,我被告知我需要添加一个方法:
error CS0535: 'SomeData' does not implement interface member
System.Runtime.Serialization.ISerializable.GetObjectData(
System.Runtime.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext)'
问题只是我希望它完全按照它当前所做的那样做,但也限制ToJson<T>
在ISerializable
类中,所以没有人会不小心传递给它一些会引发可避免异常的东西。像这样:
public static string ToJson<T> (this T value) where T : ISerializable
GetObjectData
如果我不添加接口,是否有一个简洁的实现或其他一些技巧可以复制我会得到的确切行为ISerializable
?我想要一些我可以包含在我继承的类中的东西,或者一些简洁的东西(并且总是完全相同)我可以粘贴到我想要确切[Serializable]
发生的所有类中。通用的东西。性能不是一个大问题,但我只能使用 .Net Framework 3.5。
更新:
我非常愿意使用[DataContract]
代替[Serializable]
,但是如果我这样做了,是否有一种通用的方法可以实现ISerializable
,所以[DataContract]
如果我没有实现它会做什么ISerializable
?DataContract
(与您看到的任何地方相同的 qn Serializable
)