C # OData открытый тип сериализации - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть OData model для class X:

<EntityType Name="X" OpenType="true">
  <Key>
    <PropertyRef Name="id" />
  </Key>
  <Property Name="name" Type="Edm.String" />
  <Property Name="logo" Type="Edm.String" />
</EntityType>

Когда я публикую новую сущность для этого класса, если поле имеет открытый тип и Utf8, заполняется поле свойства (Открытый тип IDictionary<string, object>)с этими UTF персонажами.Если я делаю то же самое с полем, которое не является открытым типом (имя, например), данные в порядке.

Например: если я отправлю запрос на создание нового entity X с (Это json, который я отправляю в запросе POST)

{"name":"ä,ö,ü", "nameOpenType":"ä,ö,ü"} 

, он будет сериализован в (Этообъект, который я получил в контроллере OData)

{"name":"ä,ö,ü", "nameOpenType":"\u00e4,\u00f6,\u00fc"}

Проблема заключается в том, что «nameOpenType» становится нечитаемой строкой, а не совпадает с «name».
Сериализация выполняется OData по умолчанию, когда яотправьте запрос POST на контроллер OData.
Как это исправить?

1 Ответ

0 голосов
/ 19 декабря 2018

Я могу воспроизвести проблему.UTF8 принимается контроллером в порядке.Затем, когда привязка модели происходит, десериализатор одат может ошибиться.

Почему у нас все еще есть проблемы такого рода.Кто-то изобрел другую строковую кодировку со встроенным идентификатором, например, спецификацию для файлов UTF8.

Чтобы исправить это и прочитать предполагаемую строку:

   static string DecodeEncodedNonAsciiCharacters(string value)
    {
        return Regex.Replace(
            value,
            @"\\u(?<Value>[a-zA-Z0-9]{4})",
            m => { return ((char)int.Parse(m.Groups["Value"].Value,
            NumberStyles.HexNumber)).ToString(); });
    }

Кодотсюда https://stackoverflow.com/a/1615860/5223937

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...