Я разрабатываю RESTful WCF, и в настоящее время у меня возникают проблемы с получением хороших, чистых возвращаемых в JSON-последовательностей возвращаемых значений.
Некоторое время назад я избавился от тегов «Ключ» и «Значение» вокруг каждого из моих ключей и значений (вызванных сериализацией объекта Dictionary<string, object>
) с помощью оболочки.
Но когда я это сделал, начали появляться теги "__type". Мне удалось избавиться от тега "d" вместе с первым тегом "__type", заменив WebScriptServiceHostFactory на WebServiceHostFactory в теге ServiceHost моего файла SVC.
Итак, мой результат выглядит так:
{"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);
}
РЕДАКТИРОВАТЬ: И функция SuccessfulResult выглядит так (извините, что забыл об этом):
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", я бы с удовольствием их услышал! Большое спасибо, и дайте мне знать, если я могу опубликовать что-нибудь еще, что может быть полезным.