Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Автосгенерённый класс содержит enum, и enum не выгружается в json. / 25 сообщений из 25, страница 1 из 1
15.04.2019, 18:35
    #39801717
rigor mortis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Привет,
что-то странное. Сгенерил класс из xsd, в котором есть некоторый набор значений


Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
    		<xsd:element name="Division" minOccurs="0">
    			<xsd:annotation>
    				<xsd:documentation>Сегмент</xsd:documentation>
    			</xsd:annotation>
    			<xsd:simpleType>
    				<xsd:restriction base="xsd:string">
    					<xsd:enumeration value="Field1"></xsd:enumeration>
    					<xsd:enumeration value="Field2"></xsd:enumeration>
    					<xsd:enumeration value="Field3"></xsd:enumeration>
    				</xsd:restriction>
    			</xsd:simpleType>
    		</xsd:element>



В сгенерённом классе это выгладит как

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
        private Division DivisionField;
        
        private bool DivisionFieldSpecified;

    /// <remarks/>
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.1")]
    [System.SerializableAttribute()]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true)]
    public enum Division {
        
        /// <remarks/>
        Field1,
        
        /// <remarks/>
        Field2,
        
        /// <remarks/>
        Field3,
    }



В контроллере asp.net core заполняется класс,

Код: c#
1.
Division = Division.Field1,



и выдаётся ответ по GET. В итоге в полученном json Division'а неn, есть только строка

Код: javascript
1.
"DivisionSpecified": false,



Из-за чего может быть такое? Как сделать чтобы enum отображался в json? Что-то не могу найти ничего дельного в гугле.
...
Рейтинг: 0 / 0
15.04.2019, 19:10
    #39801729
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
rigor mortis,
А тип перечислимое разве есть в js? Зачем пересылать то?
...
Рейтинг: 0 / 0
15.04.2019, 19:42
    #39801740
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
rigor mortisВ контроллере asp.net core заполняется класс,

Код: c#
1.
Division = Division.Field1,

Division в левой части присвоения - это что в данном случае?
...
Рейтинг: 0 / 0
15.04.2019, 20:22
    #39801750
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Вообще-то должен серилизоваться как число. Если надо как строку, то цеплять аттрибут [JsonConverter(typeof(StringEnumConverter))]
...
Рейтинг: 0 / 0
15.04.2019, 20:23
    #39801752
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123rigor mortis,
А тип перечислимое разве есть в js? Зачем пересылать то?

Перечислимое - это то же самое целое (по умолчанию), просто поименованное.
...
Рейтинг: 0 / 0
16.04.2019, 07:13
    #39801832
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthatPetro123rigor mortis,
А тип перечислимое разве есть в js? Зачем пересылать то?

Перечислимое - это то же самое целое (по умолчанию), просто поименованное.я в курсе. А вопрос то остался. Зачем "как бы целое" передавать например в таблицу? Что показывать?
...
Рейтинг: 0 / 0
16.04.2019, 07:14
    #39801833
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthatВообще-то должен серилизоваться как число. Если надо как строку, то цеплять аттрибут [JsonConverter(typeof(StringEnumConverter))]ну вот это другое дело. Конвертировать в простой простой класс с элементарными простыми типами.
...
Рейтинг: 0 / 0
16.04.2019, 07:36
    #39801842
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123Зачем "как бы целое" передавать например в таблицу? Что показывать?
А может быть его и не собираются показывать, а собираются просто потом передать назад, или использовать как value в лукап-комбобоксе или т.п. Это то же самое, как спросить: "а зачем гуидный id передавать в таблицу?"
...
Рейтинг: 0 / 0
16.04.2019, 07:44
    #39801845
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123,

В общем-то enum-ы это как бы и не зло, но что-то около зла )) При виде енума в голове должен звенеть звоночек - не следует ли этот енум заменить на что-то полиморфное или просто на несколько инстансов класса, по типу:

Код: c#
1.
2.
3.
4.
5.
6.
class Color {
    private Color() {}

    public readonly Color Red = new Color();
    public readonly Color Green = new Color();
}
...
Рейтинг: 0 / 0
16.04.2019, 08:16
    #39801850
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthatПри виде енума в голове должен звенеть звоночекда.
Не случайно же его нет в js в таком виде. Не умерли же они без него.
...
Рейтинг: 0 / 0
16.04.2019, 08:21
    #39801851
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthat,
Пример перечислимого - 12 месяцев в году.
Вроде понятно что на самом деле передать)))
...
Рейтинг: 0 / 0
16.04.2019, 08:49
    #39801858
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123fkthat,
Пример перечислимого - 12 месяцев в году.
Вроде понятно что на самом деле передать)))

Код: c#
1.
Month wtf = (Month)42; // Surprise?



:-)
...
Рейтинг: 0 / 0
16.04.2019, 08:53
    #39801859
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123,

Обычно, где enum, там где-то рядом и switch, а где switch, там уже точно говнокод
...
Рейтинг: 0 / 0
16.04.2019, 09:02
    #39801864
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthatа где switch, там уже точно говнокодуносите пациента
...
Рейтинг: 0 / 0
16.04.2019, 09:10
    #39801870
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
rigor mortis,

"DivisionSpecified": false наводит на мысль о том, что где-то у Вас ошибка. Попробуйте расставить точки останова и отладить код.
...
Рейтинг: 0 / 0
16.04.2019, 09:18
    #39801874
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
skyANA"DivisionSpecified": false наводит на мысль о том, что где-то у Вас ошибка. Попробуйте расставить точки останова и отладить код.пара полей Division и DivisionSpecified в совокупности с определенными атрибутами создает эдакий Nullable Division с точки зрения xml-сериализатора. JSON-сериализатор тупо игнорит эти атрибуты, поэтому DivisionSpecified со своим значением по умолчанию попадает в выход - это не ошибка в коде, это попытка использовать для json класс, предназначенный для xml
...
Рейтинг: 0 / 0
16.04.2019, 09:20
    #39801875
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
rigor mortis,

ну и XSD - это язык описания структуры XML документа, а не JSON
так что я бы не ожидал документированного поведения при таком подходе
...
Рейтинг: 0 / 0
16.04.2019, 09:23
    #39801879
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
skyANArigor mortis,

ну и XSD - это язык описания структуры XML документа, а не JSON
так что я бы не ожидал документированного поведения при таком подходеда, но свойство Divison-то должно выгружаться (как строка, насколько я помню). Правда, ТС не привел эту часть класса (где определено свойство), может он решил, что оно не нужно и удалил....
Впрочем, ТС все равно забил топик
...
Рейтинг: 0 / 0
16.04.2019, 09:26
    #39801881
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Shocker.ProskyANA"DivisionSpecified": false наводит на мысль о том, что где-то у Вас ошибка. Попробуйте расставить точки останова и отладить код.пара полей Division и DivisionSpecified в совокупности с определенными атрибутами создает эдакий Nullable Division с точки зрения xml-сериализатора. JSON-сериализатор тупо игнорит эти атрибуты, поэтому DivisionSpecified со своим значением по умолчанию попадает в выход - это не ошибка в коде, это попытка использовать для json класс, предназначенный для xml
я в курсе :)

значение false наводит на мысль, что свойство Division не выставляется таки у сериализуемого объекта
...
Рейтинг: 0 / 0
16.04.2019, 09:32
    #39801884
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
или он его удалил, или ещё чего учудил
вообщем моё мнение - ошибка явно у него и ему её искать в отладке
...
Рейтинг: 0 / 0
16.04.2019, 09:39
    #39801886
fkthat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
skyANArigor mortis,

ну и XSD - это язык описания структуры XML документа, а не JSON
так что я бы не ожидал документированного поведения при таком подходе

Ну там, как я понял, речь идет об обычном классе, просто сгенеренном из XSD. Сам XSD к JSON, понятно, что никаким боком при этом.
...
Рейтинг: 0 / 0
16.04.2019, 09:47
    #39801890
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Shocker.Profkthatа где switch, там уже точно говнокодуносите пациента
)
fkthatСам XSD к JSON, понятно, что никаким боком при этом.да. И нафига автор тут приплел одно к другому непонятно.
...
Рейтинг: 0 / 0
16.04.2019, 09:49
    #39801891
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
А вообще, если автор задал вопрос и молчит при этом, то часто это говорит о сомнительной архитектуре.
...
Рейтинг: 0 / 0
16.04.2019, 09:57
    #39801898
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
fkthatskyANArigor mortis,

ну и XSD - это язык описания структуры XML документа, а не JSON
так что я бы не ожидал документированного поведения при таком подходе

Ну там, как я понял, речь идет об обычном классе, просто сгенеренном из XSD.
Тогда DivisionSpecified должно иметь значение true, а раз false, то где-то явно ошибка :)
...
Рейтинг: 0 / 0
16.04.2019, 10:00
    #39801900
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Автосгенерённый класс содержит enum, и enum не выгружается в json.
Petro123А вообще, если автор задал вопрос и молчит при этом, то часто это говорит о сомнительной архитектуре.
По мне так об этом говорит тема автора в разделе "Разработка информационных систем" :)
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Автосгенерённый класс содержит enum, и enum не выгружается в json. / 25 сообщений из 25, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]