2

jSon から 2 つの double を取得する次のコードがあります。

Dictionary<string, object> dict = this.GetDicFromInput();
Decimal tmpLat = (Decimal)dict["lat"];
Decimal tmpLon = (Decimal)dict["lon"];

これはGetDicFromInput次のとおりです。

private Dictionary<string, object> GetDicFromInput()
{
    string input = null;

    input = "{\"lon\":34.806109,\"lat\":31.9599733}";

    var json = new JavaScriptSerializer() { MaxJsonLength = int.MaxValue };
    Dictionary<string, object> dict = (Dictionary<string, object>)json.DeserializeObject(input);

    return dict;
}

そして、実行すると次のようになります。

 [NullReferenceException: Object reference not set to an instance of an object.]
   BabySitter.Search.Page_Load(Object sender, EventArgs e) in \\psf\home\Documents\Visual Studio 2010\Projects\BabySitter\BabySitter\Search.aspx.cs:28
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

これは失敗行です:

Decimal tmpLat = (Decimal)dict["lat"];
4

1 に答える 1

1

ジェネリック関数を使用して、作成している正確なオブジェクト タイプを返します。

public T Deserialize<T>(string input)

この場合、

Dictionary<string, object> dict = json.DeserializeObject<Dictionary<string, object>(input);
于 2013-02-13T23:12:50.523 に答える