我想反序列化从WCF服务的JSON字符串到显示空输出的C#列表。JSON字符串反序列化到C#列表
WCF服务
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json
)]
public String getuserSite(String UserCode)
{
string s = "";
{
_ds = new DataSet();
try
{
_dbObj = new Database();
if (ConfigurationManager.AppSettings["DB"].ToString() == "S")
{
string[] _paramNames = { "@UserCode" };
object[] _paramvalue = { UserCode };
_ds = _dbObj.GetDatasetProc("getuserSite", _paramNames, _paramvalue);
}
else
{
string[] _paramNames = { "UserCode" };
object[] _paramvalue = { UserCode };
_ds = _dbObj.GetDatasetProc("getuserSite", _paramNames, _paramvalue);
}
return **GetJSONString**(_ds, "Sites");
}
catch (Exception ex)
{
throw ex;
}
finally
{
_dbObj.Close();
}
}
GetJSONString方法返回JSON字符串
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json
)]
public static string GetJSONString(DataSet Ds, String Name)
{
DataTable Dt = Ds.Tables[0];
if (Name != "")
{
Dt.TableName = Name;
}
string[] StrDc = new string[Dt.Columns.Count];
string HeadStr = string.Empty;
for (int i = 0; i < Dt.Columns.Count; i++)
{
StrDc[i] = Dt.Columns[i].Caption;
HeadStr += "\"" + StrDc[i] + "\" : \"" + StrDc[i] + i.ToString() + "¾" + "\",";
}
HeadStr = HeadStr.Substring(0, HeadStr.Length - 1);
StringBuilder Sb = new StringBuilder();
if (Name != "")
{
Sb.Append("{\"" + Dt.TableName + "\" : [");
}
else
{
Sb.Append("[");
}
for (int i = 0; i < Dt.Rows.Count; i++)
{
string TempStr = HeadStr;
Sb.Append("{");
for (int j = 0; j < Dt.Columns.Count; j++)
{
TempStr = TempStr.Replace(Dt.Columns[j] + j.ToString() + "¾", Dt.Rows[i][j].ToString().Replace("\r\n", "<br>").Replace("\r", "<br>").Replace("\n", "<br>").Replace("\"",""));
}
if (i < Dt.Rows.Count - 1) { Sb.Append(TempStr + "},"); } else { Sb.Append(TempStr + "}"); };
}
Sb = new StringBuilder(Sb.ToString().Substring(0, Sb.ToString().Length));
if (Name != "")
{
Sb.Append("]}");
}
else
{
Sb.Append("]");
}
return Sb.ToString();
}
JSON字符串输出
"\"{\\\"Sites\\\" : [{\\\"EQ_DESC\\\" : \\\"SIERRA India\\\",\\\"EQ_CODE\\\" : \\\"1\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Dubai\\\",\\\"EQ_CODE\\\" : \\\"24\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Malaysia\\\",\\\"EQ_CODE\\\" : \\\"99\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA US\\\",\\\"EQ_CODE\\\" : \\\"100\\\"},{\\\"EQ_DESC\\\" : \\\"Mars India\\\",\\\"EQ_CODE\\\" : \\\"110\\\"},{\\\"EQ_DESC\\\" : \\\"???\\\",\\\"EQ_CODE\\\" : \\\"151\\\"},{\\\"EQ_DESC\\\" : \\\"turkey\\\",\\\"EQ_CODE\\\" : \\\"2299\\\"},{\\\"EQ_DESC\\\" : \\\"SIERRA Infosys\\\",\\\"EQ_CODE\\\" : \\\"2331\\\"},{\\\"EQ_DESC\\\" : \\\"Infosys\\\",\\\"EQ_CODE\\\" : \\\"2338\\\"}]}\""
C#类(模型)
public class Site
{
public string EQ_DESC { get; set; }
public string EQ_CODE { get; set; }
}
public class RootObject
{
public List<Site> Sites { get; set; }
}
现在Deserialising JSON到列表
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
/* Deserializing json data from service */
var jsoncontent = reader.ReadToEnd();
string s = jsoncontent.ToString();
var results = JsonConvert.DeserializeObject<RootObject>(s);
输出:
var results = JsonConvert.DeserializeObject<Rootobject>(s);
**我们已经试过这个较早,但它返回null **
var results = JsonConvert.DeserializeObject<List<site>>(s);
上面的代码结果retun Null。
请建议我解决问题。
感谢
文卡塔斯
我们已经尝试了您的建议,但未能将JSON字符串转换为List集合,并且它返回null。请检查更新的代码。 – Venkatesh
@ user3167868第二种解决方案是否适合您? – jhontarrede
是的。第二个解决方案解决得很好。感谢您的亲切帮助 – Venkatesh