如何将 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);
    }

那么它将适用于任何类型。

请注意,您可以在保存方法中创建序列化程序,因为它是在运行时传递的类型。