문제

나는 JSON에 JavaScript 객체를 사용하여 JSON을 사용하여 행복한 일련의 일련을 사용했습니다.

         JSON.stringify

C#/asp.net의 "정적"webmethod로 전송하고 충분히 충분히 도착합니다. 올바른 매개 변수가 필요하므로 JSON 객체가 "startDate", "endDate", "Reserve"가 있으면 웹 메드가 필요합니다. 이것들은 매개 변수로서.

"기본적으로 내가 가지고있는 주문 객체와 함께이 객체에 여러 매개 변수가 있으므로 웹 메드에서 같은 숫자를 사용해야합니다. 이것은 약간 지저분합니까?" - 설명을하겠습니다

JavaScript의 다소 복잡한 "주문"객체를 가지고 있으며 Stringify를 사용하여 직렬화하고 웹 메드로 보내고 싶지만 모든 매개 변수를 지정하고 싶지는 않습니다.

내 웹 메드에서 이와 같은 것을 기대하고 있었어

           public static bool MakeReservation(object order)

그런 다음 내 웹 메드에는 1 개의 매개 변수 만 있지만 json.net을 사용하여 이것을 true c# 객체로 데려 갈 수 있습니다. 나는 이것을 JSON을 전송하는 것처럼 그것을 시도했지만 내 WebMethod에는 실패한 매개 변수가 1 개만 있기 때문입니다.

기본적으로 내가 웹 메드를 계속 사용하고 싶지만 웹 메드에 15 개의 매개 변수를 지정하고 싶지 않다는 것을 기본적으로 말하려고합니다.

JSON -String이 내 웹 메드에 도착하기를 원한 다음 서버에서 분해 할 수 있습니다.

이게 가능해?

jQuery를 사용하여 현재 JSON을 서버 (WebMethod)로 보내는 방법은 다음과 같습니다.

    var jsonData = JSONNew.stringify(orderObject);

    $.ajax({
        type: "POST",
        url: "MyService.aspx/DoReservation",
        data: jsonData,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            success = true;
        },
        error: function(msg) {
            success = false;
        },
        async: false
    });
도움이 되었습니까?

해결책

다음과 같은 것처럼 보이는 객체를 제출하려고하면 다음과 같습니다.

JSON.stringify({ endDate: new Date(2009, 10, 10), startDate: new Date() });

WebMethod의 해당 매개 변수로 EndDate 및 StartDate를 맵핑하려고합니다. 하나의 단일 방법 만 받아들이려면 다음을 제출하여 도망 갈 수 있다고 생각합니다.

JSON.stringify({ order: orderObject });

WebMethod의 'Order'매개 변수에 값으로 할당하려고 할 수 있습니다. 실패, 제출

JSON.stringify({ order: JSON.stringify(orderObject) });

그런 다음 JSON.NET을 사용하여 필사적으로 사용하는 것은 확실히 작동해야하지만 추악하므로 첫 번째 예제를 먼저 사용해보십시오. 그게 내 최고의 샷입니다.

다른 팁

있을 수있다. 나는 내용을 설명하는 데별로 잘하지 못하고 내 예제 코드를 보여줄 것입니다.

자바 스크립트 :

var Order = function(name, orderid, price) {
this.name = name;
this.orderid = orderid;
this.price = price;}

var pagePath = window.location.pathname;

function setOrder() {
var jsOrder = new Order("Smith", 32, 150);
var jsonText = JSON.stringify({ order: jsOrder });
$.ajax({
    type: "POST",
    url: pagePath + "/SetOrder",
    contentType: "application/json; charset=utf-8",
    data: jsonText,
    dataType: "json",
    success: function(response) {
        alert("wohoo");
    },
    error: function(msg) { alert(msg); }
});
}

C# 코드 뒤

public class Order
{
 public string name { get; set; }
 public int orderid { get; set; }
 public int price { get; set; }
}

[WebMethod]
public static void SetOrder(object order)
{
    Order ord = GetOrder(order);
    Console.WriteLine(ord.name +","+ord.price+","+ord.orderid);        
}
public static Order GetOrder(object order)
{
    Order ord = new Order();
    Dictionary<string,object> tmp = (Dictionary<string,object>) order;
    object name = null;
    object price = null;
    object orderid = null;
    tmp.TryGetValue("name", out name);
    tmp.TryGetValue("price", out price);
    tmp.TryGetValue("orderid", out orderid);
    ord.name = name.ToString();
    ord.price = (int)price;
    ord.orderid = (int) orderid;
    return ord;
}

내 코드는 그렇게 아름답 지 않지만 당신이 그것의 의미를 얻기를 바랍니다.

나는 최근에 컨트롤러에서 버려지고 싶었던 복잡한 JSON 객체와 함께이 문제를 겪었습니다. 유일한 차이점은 .Stringify 대신 클라이언트에서 .tojson 플러그인을 사용하는 것입니다.

쉬운 답변 :

public static bool MakeReservation(string orderJSON)
{
    var serializer = new JavaScriptSerializer();
    var order = serializer.Deserialize<Order>(orderJSON);
}

이제 장기 솔루션으로 이러한 사례를 처리하기 위해 사용자 정의 ActionFilterattribute를 만들었습니다. JSON 매개 변수를 감지하고 객체를 버려지고 동작에 매핑을 처리합니다. 당신은 똑같이하는 것을보고 싶을 수도 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top