デフォルトのコンストラクタを持たないクラス(テーブル)のオブジェクトをデシリアライズして作成する必要があるという要件があります。デフォルトのコンストラクタを使わずにデシリアライズする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;
}
これは、既存の作業コードであり、最近の変化を我々は任務のパラメータを追加する必要がありましたクラス内のすべてのコンストラクタ
ここのテーブルクラスには、パラメータレスコンストラクタがありません。
テーブルオブジェクトを整理解除するときに、少なくとも1つのパラメータを渡すことができるかどうかを調べたいと思っていました。
私はすでに以下を読んでいますが、私の場合はJSON.netを使用しています。私の場合は使用するオプションではありません。
JSON.net: how to deserialize without using the default constructor?
How to deserialize class without calling a constructor?
あなたがすることはできません。デシリアライザは、どのコンストラクタを使用するかを推測する必要がありますか?どこにパラメータを渡して渡すのでしょうか?あなたが保護されていても、これらのもののためのデフォルトのコンストラクタが必要です –
'XmlSerializer'を使う必要があるなら、あなたはできません...シリアライザの制限です – Jcl
@Jcl私は*どのコンストラクタを使用するかを知らずに一般的な方法で使用できます。 –