Rajesh Pandya Ответов: 1

Веб-служба Wcf возвращает данные в формате json


Привет

Я создал веб-сервис WCF с помощью c#, и он возвращает данные в формате json. Мой код выглядит следующим образом:

public string SampleService(Stream data)
{
	string sJSONdata = "";

	StreamReader reader = new StreamReader(data);
	sJSONdata = reader.ReadToEnd();

	//'now convert the JSON into a data table
	DataTable dt = GetJSONTable(sJSONdata);
	dt.TableName = "Customer";

	Dictionary<string, string> dict = new Dictionary<string, string>();
	foreach (DataRow rs in dt.Rows)
	{
	    dict = new Dictionary<string, string>();
	    foreach (DataColumn col in dt.Columns)
	    {
	        dict.Add(col.ColumnName, rs[col].ToString());
	    }
	}
	return (new JavaScriptSerializer().Serialize(dict));
}

И я получаю следующий результат:
{ "SampleServiceResult": "{\"Id\":\"1\",\"имя\":\"xyz\",\"электронная почта\":\"xya@test.com\"}" }

Я хочу получить результат, как показано ниже:
{ "SampleServiceResult": {"идентификатор":"1","имя":"АБВ","письмо":"xya@test.com"} }

В выводе он добавляет Escape-символ "\" в выводе. Как я могу удалить это и вернуть действительный json в выводе.

Спасибо

Что я уже пробовал:

Я пытался заменить"\", но это не работает.

Karthik_Mahalingam

используете ли Вы данные на веб-странице (javascript) ?

Rajesh Pandya

В IOS и Android

Karthik_Mahalingam

это не проблема, это просто экранирующий символ, он не повлияет на данные

Rajesh Pandya

Да, это не повлияет на данные..но для разбора json ему нужно удалить экранирующий символ

Karthik_Mahalingam

как вы разбираете данные, покажите код

Kornfeld Eliyahu Peter

- Нет! Тебе это не нужно! Используйте приличную библиотеку для синтаксического анализа JSON, и все будет хорошо!!!

Rajesh Pandya

Для этого я использую машинный код.

Kornfeld Eliyahu Peter

Где вы исследуете результат? В отладчике?
(Кстати - это валидный JSON)

Rajesh Pandya

Я проверил выход в postman и в устройстве ios.

Richard MacCutchan

Вы уверены, что это не делается вашей службой?

Richard MacCutchan

Этот код никогда не сработает. Вы создаете новый словарь для каждой строки данных, поэтому вы всегда будете сериализовывать только данные из последней строки вашей таблицы.

Rajesh Pandya

в настоящее время моя примерная таблица имеет только одну строку.

Richard MacCutchan

Ну, если у него когда-нибудь будет больше одной строки, вы не получите правильных результатов. Каково именно содержание ваших выборочных данных?

1 Ответов

Рейтинг:
8

Rajesh Pandya

Привет,

Я получил ожидаемое, применив следующие изменения в своем коде:

1. Изменил тип возвращаемого значения из строкового потока
2. Заменил код

return (new JavaScriptSerializer().Serialize(dict));
с
WebOperationContext.Current.OutgoingResponse.ContentType = "application/json; charset=utf-8";
return new MemoryStream(Encoding.UTF8.GetBytes(sData));

Спасибо всем за помощь и поддержку.

Спасибо
Раджеш