#c# #asp.net #serialization #deserialization #json-deserialization
#c# #asp.net #сериализация #десериализация #json-десериализация
Вопрос:
Я использую JavaScriptSerializer для сериализации и десериализации свойств в моем объекте. Во время сериализации все работает нормально. Однако немногие свойства сериализуются до значений по умолчанию вместо фактического значения, присвоенного им.
Это мой класс
[Serializable]
public Class SimpleClass
{
//This property is serialized properly
//But always de-serialized to null
[DefaultValue("null")]
public List<string> Collection { get; }
}
Это код, используемый для сериализации и десериализации
SimpleClass testObject =new SimpleClass();
testObject.Collection.Add("One");
testObject.Collection.Add("Two");
testObject.Collection.Add("Three");
testObject.Collection.Add("Four");
testObject.Collection.Add("Five");
//Serializing the above object
string serializedString = new JavaScriptSerializer().Serialize(testObject);
//Deserializing the serialized string
testObject = new JavaScriptSerializer().Deserialize<SimpleClass>(serializedString);
Однако после десериализации значение testObject.Collection
свойства всегда равно null
Комментарии:
1. Можете ли вы показать определение класса и строку JSON и указать, какие свойства не заполняются?
2. @Anand вы можете начать с форматирования вашего вопроса и публикации короткого, автономного, правильного (компилируемого) примера
Ответ №1:
Любое свойство без параметра setter всегда десериализуется до значения по умолчанию.
JavaScriptSerializer
внутренне использует отражение для сериализации и десериализации объекта. Если параметр setter отсутствует в свойстве, то сериализатор не может изменить значение этого свойства. Таким образом, оно будет инициализировано значением по умолчанию.
В приведенном выше коде у коллекции свойств нет значения по умолчанию, поэтому во время десериализации ему присваивается значение null.