2

Elmah ログ エラーがあります。エラーは完全なフォーム投稿情報を保存します。これらのエラーとその XML または JSON 表現に URL でアクセスできます。デバッグしたいエラーのいくつかには多くの値が投稿されており、これらのエラーを再現するのは非常に難しく、時間がかかります。

私が望むのは、elmah ログ情報を使用して、特定の投稿アクションに必要なモデルを設定する方法です。次に、このモデルを単体テストで使用して、エラーが発生する理由を正確に確認できます。

これまでのところ、XML と JSON のエラー情報からモデルに解析してみました。以下は、JSONから解析しようとしたものです。

MyModel model = ParseTo<MyModel>("Url of elmah json error");
public static T ParseTo<T>(string UrlOfJson)
{
    string fullJsonString = string.Empty;
    using(var webClient = new WebClient())
    {
        fullJsonString = webClient.DownloadString(UrlOfJson);
    }

    JObject o = JObject.Parse(fullJsonString);
    string inputString = o.SelectToken("form").ToString();

    return JsonConvert.DeserializeObject<T>(inputString);
}

これはほとんど機能します。List オブジェクトを逆シリアル化できないためです。

次のモデルがあるとします。

public class MyModel
{
    public int CustomerId { get; set; }
    public List<Offer> Offers { get; set; }
}

public class Offer
{
    public int Id { get; set; }
    public string Name { get; set; }
}

...そしてこのJson:

{
    "CustomerId": "4564",
    "Offers[0].Id": "635",
    "Offers[0].Name": "name1",
    "Offers[1].Id": "636",
    "Offers[1].Name": "name2",
}

... OffersElmah によって保存された Json が正しい形式ではないため、パーサーはプロパティのシリアル化に失敗します。デフォルトの ModelBinder で理解される形式ですが、この Json に対してどのように実行できますか?

Elamh によって保存された Json をモデル オブジェクトにシリアル化する方法はありますか?

4

2 に答える 2

0

簡単な例:

    FormCollection form = ParseTo<FormCollection>("Url of elmah json error");
    var instance = new MyModel();
    UpdateModel<MyModel>(instance, form.ToValueProvider());

したがって、基本的には JSON をSystem.Web.Mvc.FormCollection最初にデシリアライズするだけです。または でNameValueCollection、そこから作成できますFormCollection。次に、MVC バインディングをトリガーすると、モデルが取得されます。

Controller.UpdateModelメソッド (または)にアクセスできるように、このスニペットはコントローラー アクション内にある必要がありますTryUpdateModel

于 2013-05-16T22:54:48.600 に答える