IsiR_19 Ответов: 1

Как вернуть JSONP в строку из C# с использованием объекта IList, когда делаешь метод jsonresult


Привет ребята

В настоящее время я работаю над автозаполнением, которое использует тип данных jsonp, проблема, с которой я сталкиваюсь, заключается в том, что когда я возвращаю данные с моего контроллера, он возвращает данные в следующем формате

{"aaData":[{"SId":"934155","Name":"ABC CAMPAIGNS"},{"Sid":"926715","Name":"Inervation"},{"SId":"944847","Name":"International Technologies"}]}


Я бы хотел, чтобы он был возвращен как

callback([{"SId":"934155","Name":"ABC CAMPAIGNS"},{"Sid":"926715","Name":"Inervation"},{"SId":"944847","Name":"International Technologies"}]})



Это модель для моего списка в моем контроллере
 public class AutoCompleteModel
    {
        public string SId{ get; set; }
        public string Name{ get; set; }
        
    }


}


мой вызов веб-службы возвращает список с необходимыми данными

я просто не уверен, как вернуть данные в нужном мне формате.

в основном код, который я использую

Customer= new List<AutoCompleteModel>();



вот как мой список возвращается в запрос jsonp


return Json(
                 new
                 {

                     suppliers

                 },
                 JsonRequestBehavior.AllowGet);


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

Я пробовал использовать сериализатор newtonsoft и десериализатор, и я все еще получаю тот же результат, не зная, чего мне не хватает, или я что-то неправильно понимаю?

1 Ответов

Рейтинг:
2

Scyldshefing

Я бы посоветовал вам взглянуть на [Википедия JSONP]
Ваш пример кода, похоже, не поддерживает вашу проблему
(не могли бы вы предоставить более подробную информацию о вашем контроллере? вы, кажется, переключаетесь между клиентом и поставщиком)
Я попробовал следующее :
Мягкий сериализатор Ньютона:

public class UnitTest1
   {
       [TestMethod]
       public void TestMethod1()
       {
           var Customer = new List<AutoCompleteModel>
                              {
                                  new AutoCompleteModel { Name = "test1", SId = "1" },
                                  new AutoCompleteModel { Name = "test2", SId = "2" },
                                  new AutoCompleteModel { Name = "test3", SId = "3" },
                              };
           var response = JsonConvert.SerializeObject(Customer);

       }
   }
   public class AutoCompleteModel
   {
       public string SId { get; set; }
       public string Name { get; set; }
   }

Это привело к появлению сообщения в следующей форме - которое, я думаю, вам нужно:
[{"SId":"1","Name":"test1"},{"SId":"2","Name":"test2"},{"SId":"3","Name":"test3"}]

Я повторил то же самое для контроллера MVC и контроллера Web Api:
public IHttpActionResult GetProducts(ODataQueryOptions<Product> queryOptions)
       {
           // validate the query.
           try
           {
               queryOptions.Validate(ValidationSettings);
           }
           catch (ODataException ex)
           {
               return this.BadRequest(ex.Message);
           }

           var settings = new ODataQuerySettings();
           var results = queryOptions.ApplyTo(this.context.AsQueryable(), settings) as IEnumerable<Product>;
           return this.Json(results);
       }

Это также создало сообщение в том же формате (хотя и с другой моделью)
[{"ID":1,"Description":"Orange","SalePrice":15.0,"ProductGroup":"Fruit"},{"ID":2,"Description":"Apple","SalePrice":5.0,"ProductGroup":"Fruit"},{"ID":3,"Description":"Pear","SalePrice":12.0,"ProductGroup":"Fruit"}]