1

次のものがある場合:

  1. ビュー モデルを定義するオブジェクト クラスを持つ Asp.Net MVC 2 プロジェクト。
  2. JSON を使用して、これらのモデルを Web ブラウザー クライアントにシリアル化します。
  3. クライアントは、請求書の注文明細などの情報をオブジェクトに追加します。
  4. クライアントは処理のためにオブジェクトをサーバーに送り返します。

JSON オブジェクトのデータ コントラクトをクライアントと共有する方法はありますか? サーバーが Order ファクトリを使用して Order を作成し、それをクライアントに送信することを本当に望んでいます。クライアントは、データ コントラクトを使用して注文明細行を追加し、完全に入力されたオブジェクトを JSON として送り返します。

私は本当にクライアントでJavaScriptで次のことをしたいと思っています:

var order = myService.OrderFactory.GetNewClientOrderRequest();
order.description = "Some New Order";
var orderLine = myService.OrderFactory.GetNewClientOrderLine( order);
orderLine.setProductID( 1234);
orderLine.setQty( 1);
order.AddLine( orderLine);
if( order.SubmitOrder() == true) {
    //display confirmation
}

Asp.Net MVC 2 への例や Web ページへのリンクは非常に役立ちます。

4

1 に答える 1

1

さて、モデルの例を考えると:

[DataContract]
public class Item
{
  [DataMember]
  public string Title { get; set; }
}

JSON からオブジェクトをデシリアライズするアクション フィルターを作成できます。

/// <summary>
/// Deserialises a DataContract parameter from its JSON equivalence.
/// </summary>
public class JsonParameterFilter : ActionFilterAttribute
{
  #region Properties
  /// <summary>
  /// Gets or sets the parameter name.
  /// </summary>
  public string Name { get; set; }

  /// <summary>
  /// Gets or sets the type of the parameter.
  /// </summary>
  public Type Type { get; set; }
  #endregion

  #region Methods
  public override void OnActionExecuting(ActionExecutingContext filterContext)
  {
    var request = filterContext.HttpContext.Request;

    string contentType = request.ContentType;
    if (!string.IsNullOrEmpty(contentType) && contentType.ToLower().Contains("application/json")) 
    {
      var serialiser = new DataContractJsonSerializer(this.Type);
      var @object = serialiser.ReadObject(request.InputStream);

      filterContext.ActionParameters[Name] = @object;
    }
  }
  #endregion
}

そしてあなたの行動に適用されます:

[JsonParameterFilter(Name = "item", Type = typeof(Item))]
public ActionResult ProcessItem(Item item)
{
  // Do stuff here

  return View();
}

必ず行う必要があるのは、「application/json」のコンテンツ タイプでデータを投稿することです。

var item = ItemFactory.GetNewItem();
item.Title = "Something";

var json = $.toJSON(item);
$.ajax({
  contentType: "application/json; charset=utf-8"
  data: json,
  dataType: "json",
  type: "post",
  url: "Controller/Action",
});

明らかに、クライアント側のライブラリ/スクリプトは、サーバー側のインスタンスとして逆シリアル化できる JavaScript オブジェクトのインスタンスを作成できる必要があります。

于 2010-06-10T13:25:01.750 に答える