2016-08-20 7 views
-4

コントローラからモデルへプライベートコンストラクタにアクセスする方法はありますか?次のようにモデルを呼び出すメソッドを含む
コントローラは次のとおりです。mvcのコントローラからモデルクラスへのプライベートコンストラクタへのアクセス方法4

public ActionResult ReadXML() 
{ 
    XmlSerializer reader = new XmlSerializer(typeof(List<Asseted>)); 
    TextReader textReader = new StreamReader(@"D:\Tial2.xml"); 
    List<Asseted> asseted; 
    List<Asseted> list = new List<Asseted>(); 
    asseted = (List<Asseted>)reader.Deserialize(textReader); 
    textReader.Close(); 
    for (int i = 0; i < asseted.Count; i++) 
    { 
     string data123 = Convert.ToString(asseted[i].PopertyValue); 
     string data234 = Convert.ToString(asseted[i].PropertyName); 
     list.Add(new Asseted(data123,data234)); 

    } 
    return View(); 
} 

Methodを含むモデルが呼ばれるように、次のとおりです。

[XmlRoot] 
public class Asseted 
{ 
    string pName, pValue; 
    private string data234; 
    private string data123; 

    private Asseted(string data234, string data123) 
    { 
     // TODO: Complete member initialization 
     PropertyName = data234; 
     PopertyValue = data123; 
    } 
    [XmlElement] 
    public string PropertyName { get; set; } 

    [XmlElement] 
    public string PopertyValue { get; set; } 
} 
+1

Assetedクラスにプライベートコンストラクタが必要なのはなぜですか? –

+0

私は文字列としてリストとして表示するコントローラからの名前/値のペアを印刷したいので –

+1

短い答えはいいえです(プライベートはクラス自体にプライベートを意味します)。しかし、あなたのループのポイントは何ですか。 'asseted =(List )reader.Deserialize(textReader);' codeはすでにコレクションを作成しています。別の同一のコレクションを作成する際のポイントは何ですか?そして、なぜ 'string'を別の' string'に変換するのですか(それは既に 'string'です) –

答えて

2

は、プライベートコンストラクタにアクセスする方法はありますコントローラーからモデルへ?

これはあなたの問題を解決するために権利方法であれば、それは議論の余地かもしれないが、問題自体はYESで答えることができます。そしてそれは反射でも非常に難しいことではありません。

ConstructorInfo constructor = typeof(Asseted).GetConstructor(
    BindingFlags.NonPublic | BindingFlags.Instance, 
    null, 
    new[] { typeof(string), typeof(string) }, 
    null); 

Asseted instance = constructor.Invoke(new[] { 
    "data234", 
    "data123" 
}) as Asseted; 

基本的には、タイプ(Asseted)を取得あなたの既知のパラメータの型と一致し、それを呼び出すコンストラクタを取得します。完了しました。

その他の注: コンパイラと実際のコードによっては、TypeAccessExceptionに実行される可能性があります。

関連する問題