как получить Web Api send Json.net сериализованный строковый объект обратно клиенту правильно?


Я сериализую объект IEnumerbale с помощью JsonConvert.SerializeObject( ); он создает строку с кавычками и escape-символ с пробелами

Из контроллера web Api я возвращаю эту строку с помощью кода ниже

[HttpGet]
public string GetDegreeCodes(int id)
{
    string result = //output from JsonConvert.SerializeObject( );
    return result;
}

"[{"DegreeId": 1, " DegreeName": " High School", " ImageSrc":" http://bootsnipp.com/apple-touch-icon-114x114-pre","описание":" Получить Среднюю Школу Degreer"}, {"DegreeId": 2, " DegreeName": " Associate","ImageSrc":" http://bootsnipp.com/apple-touch-icon-114x114-pre","описание":" Вам Связать Degreer"}, {"DegreeId": 3,"DegreeName": " Bachelor", " ImageSrc":" http://bootsnipp.com/apple-touch-icon-114x114-pre","описание":" Получить Степень Бакалавра Degreer"}, {"DegreeId": 4, " DegreeName": " Masters","ImageSrc":" http://bootsnipp.com/apple-touch-icon-114x114-pre","описание":" Получить Мастера Degreer"}, {"DegreeId": 5, " DegreeName": " Doctrate","ImageSrc":" http://bootsnipp.com/apple-touch-icon-114x114-pre","описание":" Получить Степень Доктора Наук"}] "

Это мой ajax, и он не распознает JSON правильно из-за дополнительных кавычек оболочки и escape-символов,

$.ajax({
        url: "/api/helloservice/getdegreecodes",
        type: "get",
        contentType: "application/text",
        data: { id: 1 }
    }).done(function (data) {
        if (data.length > 0) {

            for (i = 0; i < data.length; i++) {
                viewEduModel.degreeCodes.push(data[i]);
            }

        }
    });

Мне нужно использовать JsonConvert.SerializeObject, так как я кэширую его как JSon на мой сервер Redis кэша с помощью booksleeve, что способ я не нужно повторная сериализация и чтение из БД каждый раз. как избежать отправки контроллера web api Кавычки и обратные косые черты? я мог бы просто вернуть IEnumerable и пусть Web Api делает сериализацию JSOn, но мне нужно кэшировать его на redis сторона

2 6

2 ответа:

Вы могли бы что-то вроде ниже:

[HttpGet]
public HttpResponseMessage GetDegreeCodes(int id)
{
    StringContent sc = new StringContent("Your JSON content from Redis here");
    sc.Headers.ContentType = new MediaTypeHeaderValue("application/json");

    HttpResponseMessage resp = new HttpResponseMessage();
    resp.Content = sc;

    return resp;
}

С его помощью можно вызвать webapi через код.

using (var client = new WebClient()) //WebClient  
{
   string mystring = "";               
  client.Headers.Add("Content-Type:application/json"); //Content-Type  
  client.Headers.Add("Accept:application/json");                      
  var dataa = Encoding.UTF8.GetBytes("{\"Username\":\"sdfsd\"}");                      
  byte[] a = client.UploadData("your API url", "POST",dataa);                        
  myString = Encoding.UTF8.GetString(a);
  
  }