Когда я сериализую объект класса со свойством enum в JSON, если значение равно нулю, результирующий json будет обработан - PullRequest
6 голосов
/ 10 февраля 2009

Когда я сериализую объект класса со свойством enum в JSON, если значение равно нулю, результирующая строка json имеет пару имя-значение, например:

"controlType":"-2147483648"

Это вызывает проблемы при десериализации строки в строго типизированный объект.

Какой лучший способ обработки перечислений и нулей?

Ответы [ 2 ]

5 голосов
/ 13 февраля 2009

Приведенный ниже код дает вам json = ' {"Name": "Test", "Id": 1, "MyEnum": 3} ', если у вас есть ненулевое значение.

        public enum SerializeObjTestClassEnum
    {
        one = 1, two, three, four
    }

    [Serializable]
    public class SerializeObjTestClass
    {
        public string Name { get; set; }
        public int Id { get; set; }
        public SerializeObjTestClassEnum MyEnum{ get; set; }
    }

    public void SerializeObject_Test_Basic_Object()
    {
        var obj = new SerializeObjTestClass { Id = 1, Name = "Test", MyEnum = SerializeObjTestClassEnum.three };
        var json = (new JavaScriptSerializer()).Serialize(obj);
    }

этот код дает вам json = ' {"Name": "Test", "Id": 1, "MyEnum": 0} '

    var obj = new SerializeObjTestClass { Id = 1, Name = "Test" };

Обратите внимание, что перечисление, если оно не установлено, сериализуется в 0, а само перечисление начинается с 1. Так что, как вы можете кодировать, вы можете узнать, что для перечисления использовалось значение NULL.

если вы хотите, чтобы json выглядел как ' {"Name": "Test", "Id": 1, "MyEnum": null} ', то вам понадобится подделать это с помощью обертки класса вокруг Enum.

0 голосов
/ 10 февраля 2009

Рассмотрим:

echo json_encode(array("test"=>null));

Это производит:

{"test":null}

Лучший способ обработки перечислений - это ключ, массив значений или класс stdClass. Просто свяжите свои имена с набором уникальных целых чисел. Затем вы можете связать и другое направление:

{ "A": 1, "БИ 2, "С": 3, 1: "А", 2: "В", 3: "С"}

Это, по крайней мере, дает вам двунаправленность.

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