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?
你试过这个[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)