.Net - 序列化对象

Sys*_*Sys 1 c# generics serialization

如果我有对象类型属性或泛型对象的对象,我该如何序列化?

例如.

public class MyClass
{
   public Object Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

要么

public class MyClass<T>
{
   public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

编辑

我的Generic类现在看起来像这样:

public class MyClass<T>
{
   public MySubClass<T> SubClass { get; set; }
}

public class MySubClass<T>
{
   public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

附加问题:如何在运行时将Item的元素名称更改为typeof(T).Name?

Den*_*aub 6

你试过这个[Serializable]属性吗?

[Serializable]
public class MySerializableClass
{
   public object Item { get; set; }
}

[Serializable]
public class MySerializableGenericClass<T>
{
   public T Item { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

虽然泛型类只有序列化,但泛型类参数也是可序列化的.

Afaik没有办法将类型参数限制为可序列化.但是您可以在运行时使用静态构造函数进行检查:

[Serializable]
public class MySerializableGenericClass<T>
{
   public T Item { get; set; }

   static MySerializableGenericClass()   
   {
      ConstrainType(typeof(T));
   }

   static void ConstrainType(Type type)
   {
      if(!type.IsSerializable)
         throw new InvalidOperationException("Provided type is not serializable");
   }
}
Run Code Online (Sandbox Code Playgroud)