【发布时间】:2011-09-30 20:39:14
【问题描述】:
我正在开发一个 RESTful WCF,但目前无法获得漂亮、干净的 JSON 序列化返回值。
A little while back, I got rid of "Key" and "Value" tags 使用包装器围绕我的每个键和值(由序列化 Dictionary<string, object> 对象引起)。
但是当我这样做时,“__type”标签开始出现。通过在我的 svc 文件的 ServiceHost 标记中将 WebScriptServiceHostFactory 替换为 WebServiceHostFactory,我设法摆脱了“d”标记以及第一个“__type”标记。
所以我的结果是这样的:
{"Status":"Success","Data":{"__type":"SerializableDictionaryOfstringanyType:#MyNamespace.MyFolder","Key1":"Value1","Key2":"Value2","Key3":"Value3"}}
但我希望它看起来像这样:
{"Status":"Success","Data":{"Key1":"Value1","Key2":"Value2","Key3":"Value3"}}
我的测试网络服务代码如下所示:
[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
public SerializableDictionary<string, object> Test1(String Token, String Id)
{
DataTable testTable = new DataTable();
testTable.Columns.Add("Key1", typeof(System.String));
testTable.Columns.Add("Key2", typeof(System.String));
testTable.Columns.Add("Key3", typeof(System.String));
DataRow testRow = testTable.NewRow();
testRow["Key1"] = "Value1";
testRow["Key2"] = "Value2";
testRow["Key3"] = "Value3";
testTable.Rows.Add(testRow);
return SuccessfulResult(testTable);
}
编辑: SuccessResult 函数如下所示(抱歉忘记了):
private SerializableDictionary<string, object> SuccessfulResult(DataTable dt = null)
{
SerializableDictionary<string, object> result = new SerializableDictionary<string, object>();
result.Add("Status", "Success");
if (dt == null || dt.Rows.Count != 1)
return result;
SerializableDictionary<string, object> dct = new SerializableDictionary<string, object>();
foreach (DataColumn currCol in dt.Rows[0].Table.Columns)
dct.Add(currCol.ColumnName, dt.Rows[0][currCol.ColumnName].ToString());
result.Add("Data", dct);
return result;
}
如果有人对我如何摆脱最后一个小“__type”标签有任何想法,我很想听听他们的意见!非常感谢,如果我可以发布任何其他可能对您有帮助的内容,请告诉我。
【问题讨论】:
标签: asp.net json rest serialization