【发布时间】:2017-12-23 13:40:18
【问题描述】:
这是我的 C# 网络服务,它生成一个 JSON 字符串。下面的代码块是我使用的。
List<Dictionary<String, Object>> lstdict = new List<Dictionary<String, Object>>();
...
...
...
Logic for connecting db and getting records in msqldat (data reader)
goes here.
...
...
while (msqldat.Read())
{
var detls = new Dictionary<string, object>();
for (int i = 0; i < msqldat.FieldCount; i++)
{
detls.Add(msqldat.GetName(i), msqldat.IsDBNull(i) ? null :
msqldat.GetValue(i));
lstdict.Add(detls);
}
}
JavaScriptSerializer jss = new JavaScriptSerializer();
String mret = jss.Serialize(lstdict);
上面的webservice是在android studio的java代码中调用的,它返回下面的字符串。
{"GetDataResult":"[
{\"uname\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"passwd\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"validupto\":\"\\\/Date(1545330600000)\\\/\",
\"dept\":\"juubHSHgLr\/3JWnrZCh5LeeW5Q7lioWOZ1\/Tg+YRy\/o=\",
\"rid\":1},
{\"uname\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"passwd\":\"hkIUZIikXVTC5aNaSva8IQ==\",
\"validupto\":\"\\\/Date(1545330600000)\\\/\",
\"dept\":\"juubHSHgLr\/3JWnrZCh5LeeW5Q7lioWOZ1\/Tg+YRy\/o=\",
\"rid\":2}]"}
我正在尝试使用此 Java 代码获取 android 应用程序中的值:
JSONObject uiobj = new JSONObject(mret);
JSONArray arrUserinfo = uiobj.getJSONArray("GetDataResult");
arrUserinfo.getJSONObject(0).getString("uname"))
代码在第二行失败。我是 JSON 新手。不确定从 c# 代码生成的 JSON 是否正确或用于解析的 java 代码不正确。请进一步告知。提前谢谢你。
【问题讨论】:
-
第二行代码失败?发布堆栈跟踪?
-
您的 json 数据格式不正确。这就是它失败的原因。我认为转义字符正在这样做。转到jsonformatter.org 并将您的 json 数据粘贴到那里以查看天气格式是否正确
-
您的 JSON 的某些部分似乎已经按照JSON.NET Parser seems to be double serializing my objects 的方式进行了双重序列化——即使您使用的是
JavaScriptSerializer而不是Json.NET。你能展示你如何从你的网络服务返回你的 JSON 吗? -
@AswinPAshok 感谢您的回复。我参考了 jsonformatter.org,发现 JSON 格式无效。谢谢。
-
@dbc 感谢您的回复。这就是我从 WebService 返回的方式。