2016-03-21 7 views
1

デフォルトのコンストラクタを持たないクラス(テーブル)のオブジェクトをデシリアライズして作成する必要があるという要件があります。デフォルトのコンストラクタを使わずにデシリアライズする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?

+1

あなたがすることはできません。デシリアライザは、どのコンストラクタを使用するかを推測する必要がありますか?どこにパラメータを渡して渡すのでしょうか?あなたが保護されていても、これらのもののためのデフォルトのコンストラクタが必要です –

+1

'XmlSerializer'を使う必要があるなら、あなたはできません...シリアライザの制限です – Jcl

+0

@Jcl私は*どのコンストラクタを使用するかを知らずに一般的な方法で使用できます。 –

答えて

-1
public class Tables 
{ 
    public Tables(object Mandate) 
    { 

    } 

    private Tables() 
    { 
     // Private parameterless constructor. Leave private so that it forces everyone to use the Mandate parameter but allows serialization to work. 
    } 
} 
+0

もし私が間違っていないならば、組み込みデシリアライゼーションのための無パラメータコンストラクタは 'public'でなければなりません。 – Codor

+1

これがOPの質問に答える理由を説明してください。コードのみの回答は一般的に低品質とみなされます。 OPがデフォルトのコンストラクタを持たないソリューション*を要求した場合、*あなたのソリューションがデフォルトのコンストラクタを導入する理由を説明する必要があります –

+0

'Tables'クラス内のオブジェクトを参照する必要があります。 。 param-lessコンストラクタを使用すると、私はそれを逃してしまいます。 –

関連する問題