2017-10-21 2 views
0

でJSONなどのデータは、私はこのアヤックスを持って取得:コントローラ

$.ajax({ 
     url: "/api/Values", 
     dataType: "json", 
     type: "POST", 
     contentType: 'application/json; charset=utf-8', 
     data: JSON.stringify({ 
      Id: "1", Name: "Name1", Family: "Family1" 
     }), 

んが、私は私はlog4netのテキストファイルに保存することができるように、コントローラにdataを取得したいん。現在、私はこのコードを書いています:

public void PostValues(Class1 cs) 
    { 
     var data = $"Id = {cs.Id}, Name = {cs.Name}, Family = {cs.Family}"; 
     Log.Debug($"POST Request, value = {data}"); 
    } 

モデルバインディングでは、上記のようなクラスプロパティにバインドされたデータを取得し、上記のように組み合わせることができます。しかし、私はすべてのクラスのプロパティを通過する必要があるので、私はこの方法を使用したくないです。 JSONとしてコントローラにデータを投稿する方法はありますか?私は、コントローラに以下の行を取得する方法でなければなりません確信している:

Id: "1", Name: "Name1", Family: "Family1" 

答えて

2

あなたは文字列バージョンにオブジェクトをシリアライズするシリアライザを使用することができます。ここでは、​​

public void Post(Class1 value) 
{ 
    var stringVersion = Newtonsoft.Json.JsonConvert.SerializeObject(value); 
    // use stringVersion now. 
} 

で別のオプションをそれを行いますどのようなことは、あなたのクラスでToString()をオーバーライドし、必要に応じてそれを使用することです。あなたは今、あなたは単にあなたのMyClassのオブジェクトにToString()を呼び出すことができます

public class MyClass 
{ 
    public int Id { set; get; } 
    public string Name { set; get; } 
    public string Family{ set; get; } 

    public override String ToString() 
    { 
     return $"Id:{Id},Name:{Name}"; 
    } 
} 

)のToString(によって返される文字列内の関連するプロパティの値を含めることができます。

public void Post(MyClass value) 
{ 
    if(value!=null) 
    { 
     var stringVersion = value.ToString(); 
    } 
} 
+0

のようなJSONオブジェクトにクラスのオブジェクトをシリアル化するためにJavaScriptSerializerを使用することができます。 –

+0

jsonを逆シリアル化してシリアル化する理由jsonをリクエストから読み取る方法が必要です。 (WCFでは可能ですがwebapiは使用していません) –

+0

@LB、 'Request.InputStream'は、コントローラ内の生データを提供します。それ以外では、 'HttpContext.Current.Request.InputStream'を使って生データを取得することができます。しかし、再び、ロギング以外に、モデルオブジェクトとしてそれを受け入れることが正しい方法である、このデータに対する追加の処理があるかもしれません。 –

0

あなたは期待通りに動作するでしょう。この

var json = new JavaScriptSerializer().Serialize(cs);