我有一个需求,我需要反序列化并创建一个没有默认构造函数的类(表)的几个对象。反序列化没有默认的构造函数C#
我的代码片段
else if (reader.Name == "Tables")
{
reader.ReadStartElement();
tables = SerializationHelper<Table>.DeserializeList(reader);
}
在SerializationHelper的DeserializeList的定义如下:
public static List<T> DeserializeList(XmlReader reader)
{
XmlSerializer ser = new XmlSerializer(typeof(T));
List<T> returnval = new List<T>();
while (reader.NodeType != XmlNodeType.EndElement)
{
T result = (T)ser.Deserialize(reader);
returnval.Add(result);
}
return returnval;
}
这是现有的工作代码,并与近期的变化,我们不得不授权参数添加到该类中的所有构造函数
此处的Table类现在没有任何无参数构造函数。
我想知道在DeSerializing Table对象时,我是否可以传递至少一个参数。
我已阅读以下内容,但他们使用JSON.net,在我的情况下是不是一个选项使用。
JSON.net: how to deserialize without using the default constructor?
How to deserialize class without calling a constructor?
你不能。解串器应该如何猜测使用哪个构造函数?它会在哪里找到传递给它的参数?你需要这些东西的默认构造函数,即使它被保护了 –
如果你需要使用'XmlSerializer',那么你不能......这是这个串行器的限制 – Jcl
@Jcl我怀疑*任何串行器都可以工作以通用的方式不知道使用哪个构造函数。 –