C# Возможно сериализовать описание Enum вместо значения Enum с Json - PullRequest
0 голосов
/ 08 января 2020

У меня есть ситуация, когда я получаю ответ от двух разных веб-сервисов. Два ответа идентичны по структуре, но имеют разные родительские пространства имен. Я пытаюсь преобразовать эти ответы в стандартный класс, который затем можно передать родительскому объекту. Я подумал, что самым простым способом было сериализовать входящий объект до Json, а затем десериализовать объект в мой стандартный объект. Это делает мой код обработки довольно простым

var jsonString = JsonConvert.SerializeObject(serviceResponse.Results);
var commonObject = JsonConvert.DeserializeObject<StandardResult>(jsonString);

И по большей части это работает. Однако я расширяю объект StandardResult, в котором обнаружена небольшая проблема.

Одним из свойств объекта является класс со следующими свойствами:

public class EntryDetailType
{
public string EntryNumber {get; set;}
public string EntryText {get; set;
public int Item {get; set;}
}

Проблема является то, что Item на самом деле может быть одним из двух различных перечислений во входящих данных. Поэтому, хотя преобразование правильно помещает значение перечисления в Item, я понятия не имею, к какому перечислению относится это значение. Я не на этом этапе использую класс JsonConverter, поскольку объект очень большой, и я хотел бы избежать этого, если это возможно.

Есть ли способ получить описание enum вместо значения как части этого процесса, или я буду вынужден написать свои собственные json преобразователи? Помните, что класс EntryDetailType не входит в мой проект. Это тип возврата из веб-службы, который был добавлен через документ wsdl.

1 Ответ

0 голосов
/ 08 января 2020

Что ж, если класс EntryDetailType действительно имеет свойство с именем Item типа int, невозможно определить, какое значение представления имени у enum есть.

Но если этот класс имеет свойство Item любого типа enum, то его так же просто, как сериализовать до Json с использованием встроенного StringEnumConverter в качестве второго параметра метода SerializeObject:

var jsonString = JsonConvert.SerializeObject(serviceResponse.Results, new Newtonsoft.Json.Converters.StringEnumConverter()); 

ps: я предполагаю, что вы используете Json. NET от NewtonSoft.

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