TLDR; Can not parse querystring data to object model using Json.net deserializer.
Long version:
I'm using Newtonsoft.Json's DefaultContractResolver for Json serializer in dotnet core 2.0;
var mvc = services.AddMvc();
mvc.AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
});
< /code>
В веб -контроллере API я использую модель; < /p>
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public Core.Data.Models.Request.DataSourceRequestModel Get(Core.Data.Models.Request.DataSourceRequestModel req)
{
return req;
}
}
< /code>
и dataSourcErequestModel IS; < /p>
public sealed class DataSourceRequestModel
{
[JsonProperty(PropertyName = "start")]
public int Start { get; set; }
[JsonProperty(PropertyName = "limit")]
public int Limit { get; set; }
[JsonProperty(PropertyName = "filter")]
public ICollection Filters { get; set; }
[JsonProperty(PropertyName = "sort")]
public ICollection Sorts { get; set; }
public DataSourceRequestModel()
{
Limit = 25;
}
}
public class DataSourceRequestFilterModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "operator")]
public string Operator { get; set; }
[JsonProperty(PropertyName = "value")]
public string Value { get; set; }
}
public class DataSourceRequestSortModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "direction")]
public string Direction { get; set; }
}
< /code>
Я вызываю контроллер с этим запросом;
http: // localhost: 9417/api/values/? _dc = 1505751693766 & page = 1 & start = 99 & Limit = 163 & Filter =%5b%7b%22%22%3a%22code%22%2c%22 -Value%22%3a%22%2 2%2C%22Perator%22%3A%22EQ%22%7D%2C%7B%22PORTY%22%3A%22 -name%22%2C%22 Value%22%3A%22%5CU00FCCRETLI%22%2C%22%22%3A%22 EQ%22%7D%5D
По сути, я посылаю это значение как querystring; < /p>
_dc:1505755748815
page:1
start:99
limit:163
sort:[{"property":"Name","direction":"ASC"}]
filter:[{"property":"Code","value":"","operator":"eq"},{"property":"Name","value":"Ucretli","operator":"eq"}]
< /code>
В результате я получаю это; < /p>
{
"start": 99,
"limit": 163,
"filter": null,
"sort": null
}
< /code>
json.net deserializer не может проанализировать фильтр и сортировки, просто игнорируя их. Даже если я изменяю имена свойств, на этот раз он не возвращает нулевые значения, но опять же, я получаю пустой массив. DataSourCeRequestFiltermodel [] Изменения массива и до сих пор не успешно. Как упомянуто здесь DBC2, Dotnet Core не использует json.net для сложной привязки модели, поэтому свойства в модели остаются нулевыми. Таким образом, вы должны создавать и использовать свои собственные привязки модели, подробно здесь;
http://www.dotnetcurry.com/aspnet-mvc/1 ... el-binding
Еще раз спасибо всем, кто есть.
Подробнее здесь: https://stackoverflow.com/questions/462 ... re-web-api
JSON.net Deserialization в Dotnet Core Web API ⇐ C#
Место общения программистов C#
-
Anonymous
1757202415
Anonymous
[b]TLDR;[/b] Can not parse querystring data to object model using Json.net deserializer.
[b]Long version:[/b]
I'm using Newtonsoft.Json's DefaultContractResolver for Json serializer in dotnet core 2.0;
var mvc = services.AddMvc();
mvc.AddJsonOptions(options =>
{
options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
options.SerializerSettings.Formatting = Newtonsoft.Json.Formatting.Indented;
});
< /code>
В веб -контроллере API я использую модель; < /p>
[Route("api/[controller]")]
public class ValuesController : Controller
{
[HttpGet]
public Core.Data.Models.Request.DataSourceRequestModel Get(Core.Data.Models.Request.DataSourceRequestModel req)
{
return req;
}
}
< /code>
и dataSourcErequestModel IS; < /p>
public sealed class DataSourceRequestModel
{
[JsonProperty(PropertyName = "start")]
public int Start { get; set; }
[JsonProperty(PropertyName = "limit")]
public int Limit { get; set; }
[JsonProperty(PropertyName = "filter")]
public ICollection Filters { get; set; }
[JsonProperty(PropertyName = "sort")]
public ICollection Sorts { get; set; }
public DataSourceRequestModel()
{
Limit = 25;
}
}
public class DataSourceRequestFilterModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "operator")]
public string Operator { get; set; }
[JsonProperty(PropertyName = "value")]
public string Value { get; set; }
}
public class DataSourceRequestSortModel
{
[JsonProperty(PropertyName = "property")]
public string Property { get; set; }
[JsonProperty(PropertyName = "direction")]
public string Direction { get; set; }
}
< /code>
Я вызываю контроллер с этим запросом;
http: // localhost: 9417/api/values/? _dc = 1505751693766 & page = 1 & start = 99 & Limit = 163 & Filter =%5b%7b%22%22%3a%22code%22%2c%22 -Value%22%3a%22%2 2%2C%22Perator%22%3A%22EQ%22%7D%2C%7B%22PORTY%22%3A%22 -name%22%2C%22 Value%22%3A%22%5CU00FCCRETLI%22%2C%22%22%3A%22 EQ%22%7D%5D
По сути, я посылаю это значение как querystring; < /p>
_dc:1505755748815
page:1
start:99
limit:163
sort:[{"property":"Name","direction":"ASC"}]
filter:[{"property":"Code","value":"","operator":"eq"},{"property":"Name","value":"Ucretli","operator":"eq"}]
< /code>
В результате я получаю это; < /p>
{
"start": 99,
"limit": 163,
"filter": null,
"sort": null
}
< /code>
json.net deserializer не может проанализировать фильтр и сортировки, просто игнорируя их. Даже если я изменяю имена свойств, на этот раз он не возвращает нулевые значения, но опять же, я получаю пустой массив. DataSourCeRequestFiltermodel [] Изменения массива и до сих пор не успешно. Как упомянуто здесь DBC2, Dotnet Core не использует json.net для сложной привязки модели, поэтому свойства в модели остаются нулевыми. Таким образом, вы должны создавать и использовать свои собственные привязки модели, подробно здесь;
http://www.dotnetcurry.com/aspnet-mvc/1368/aspnet-core-mvc-custom-model-binding
Еще раз спасибо всем, кто есть.
Подробнее здесь: [url]https://stackoverflow.com/questions/46286088/json-net-deserialization-in-dotnet-core-web-api[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия