如何将 save() 方法一般添加到具有 DataContract 的 类?
How to add save() method generically to classes that have a DataContract?
我有一个 class 和 DataContract
可以保存到文件中:
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace Test
{
[DataContract]
public class Data
{
[DataMember]
public float Value;
public static void Main(string[] args)
{
Data data = new Data();
data.Value = 2.3F;
data.Save(@"D:\result.txt");
}
public void Save(string path)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Data));
serializer.WriteObject(stream, this);
}
}
}
我还有其他 class 和 [DataContract]
我也想保存。我不想在每个 class 中重复代码。 如何将 Save()
方法添加到所有具有 [DataContract]
的 class 中?
理想情况下,这将在以序列化器作为参数的扩展方法中工作,但类型 ???
应该是什么?
public static class SaveExtension
{
public static void Save(this ??? serializable, string path, DataContractSerializer serializer)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
serializer.WriteObject(stream, serializable);
}
}
只需使您的扩展方法通用:
public void Save<T>(this T obj, string path)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(stream, obj);
}
那么它将适用于任何类型。
请注意,您可以在保存方法中创建序列化程序,因为它是在运行时传递的类型。
我有一个 class 和 DataContract
可以保存到文件中:
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
namespace Test
{
[DataContract]
public class Data
{
[DataMember]
public float Value;
public static void Main(string[] args)
{
Data data = new Data();
data.Value = 2.3F;
data.Save(@"D:\result.txt");
}
public void Save(string path)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(Data));
serializer.WriteObject(stream, this);
}
}
}
我还有其他 class 和 [DataContract]
我也想保存。我不想在每个 class 中重复代码。 如何将 Save()
方法添加到所有具有 [DataContract]
的 class 中?
理想情况下,这将在以序列化器作为参数的扩展方法中工作,但类型 ???
应该是什么?
public static class SaveExtension
{
public static void Save(this ??? serializable, string path, DataContractSerializer serializer)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
serializer.WriteObject(stream, serializable);
}
}
只需使您的扩展方法通用:
public void Save<T>(this T obj, string path)
{
FileStream stream = new FileStream(path, FileMode.OpenOrCreate);
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
serializer.WriteObject(stream, obj);
}
那么它将适用于任何类型。
请注意,您可以在保存方法中创建序列化程序,因为它是在运行时传递的类型。