Iは、次のブロックを有する:なぜC#継承された静的メンバーがFlattenHierarchyフラグを持つpropType.GetMethodに見つからないのですか?
public abstract class AParsable<T> where T : AParsable<T>
{
public static T Parse(string input)
{
return JSON.TryParse<T>(input);
}
}
このように使用される(完全な利用を意図して編集TL; DR:要求データクラスに着信要求の本体を解析
public static T ParseBody<T>(this System.Web.HttpRequestBase request) where T: new()
{
var instance = new T();
var publicProps = typeof(T).GetProperties();
var stringType = typeof(string);
foreach (var prop in publicProps)
{
var propType = prop.PropertyType;
if (!prop.CanWrite) continue;
var input = request.Form[prop.Name];
if (string.IsNullOrEmpty(input)) continue;
if (propType == typeof(string))
{
prop.SetValue(instance, input, null);
}
else
{
var parse = propType.GetMethod("Parse", BindingFlags.Public | BindingFlags.Static, null, new Type[] { stringType }, null);
if (parse != null) // I always get null here
{
var value = parse.Invoke(null, new object[] { input });
prop.SetValue(instance, value, null);
}
}
}
return instance;
}
。もしそうならそれを感謝します:私は常にアップデートには、以下のコード
public class TreeNodeArray : AParsable<TreeNodeArray>
{
public List<TreeNodeWrapper> nodes { get; set; }
}
用としてnullを解析しますMeoneは、.NET MVCの要求本体をクラスインスタンスに動的に解析するためのより良い方法を指摘することができます。
アップデート2:それはこのように使用されるコントローラでは:(それはタイトルにありますが)
internal class MyRequestModel {
public TreeNodeArray selectedNodes { get; set; }
public bool isForAllNodes { get; set; }
}
var requestData = Request.ParseBody<MyRequestModel>();
requestData.selectedNodes == null;
propTypeはどのように初期化されますか? –
私は使用意図の詳細について質問を更新しました。 – bigopon