3

場合によっては発生するが、通常のシナリオでは発生しない奇妙な問題に直面しています。コントローラーにデータを送信するajax呼び出しがあります。ほとんどの場合、ajax呼び出しはデータをコントローラーに正しく送信しますが、失敗した場合(例外)、jsonが受信したログが不完全です。この誤った行動の根本的な原因は何なのか、私にはよくわかりません。どんなポインタも大いに役立つでしょう...

これが私のコードです-

C#

        public class MyController : System.Web.Mvc.Controller {
      ....
      ....
        public JsonResult doPost(string x, string y, int z) {

        private JavaScriptSerializer _serialiser = new JavaScriptSerializer();
        List<Dictionary<string, object>> items = _serialiser.Deserialize<List<Dictionary<string, object>>>(x); 
 // deserialsation throws argument exception
     ...
     // do stuff after that...
    }

    ...
    }

例外の詳細

タイプ-System.ArgumentException

メッセージ-渡された終了していない文字列。

スタックトレース -

at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeString()
   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)
   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)
   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)
   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)
   at System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext)
   at System.Web.Mvc.ValueProviderFactoryCollection.<>c__DisplayClassc.<GetValueProvider>b__7(ValueProviderFactory factory)
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext)
   at System.Web.Mvc.ControllerBase.get_ValueProvider()
   at System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
   at System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
   at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

Javascript

// A - is a big object
    var jsonData = { x: JSON.stringify(A),
                    y: new Date().toString(),
                    z: A.Index
                };

$.ajax ({ 
url : '/my/doPost', 
type: 'POST', contentType: 'application/json; charset=utf-8;', 
cache: false, 
data: JSON.stringify(jsonData), 
dataType: 'json', 
async: true, 
success: function () {
  // do something on success
}, 
error: function (jqXhr, textStatus, errorThrown)  {
// do something on error
}
});

ありがとうSaarthak

4

0 に答える 0