-3

JavaScriptSerializer를 사용하여 개체의 속성을 serialize 및 deserialize하는 이유는 무엇입니까? 직렬화 중에는 모든 것이 잘 작동합니다. 그러나 할당 된 실제 값 대신 기본값으로 직렬화되는 속성은 거의 없습니다. JavaScriptSerializer가 속성을 기본값이나 null로 역 직렬화하는 이유

testObject.Collection 속성의 값은 항상 널 (null)

입니다이 드 직렬화 후 직렬화에 사용되는 코드와

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); 

그러나 탈 직렬화이다

[Serializable] 
public Class SimpleClass 
{ 
    //This property is serialized properly 
    //But always de-serialized to null 
    [DefaultValue("null")] 
    public List<string> Collection { get; }  
} 

내 클래스

+0

클래스 정의와 JSON 문자열을 표시하고 채워지지 않은 속성을 나타낼 수 있습니까? – David

+0

@Anand 질문을 형식화하고 [* 짧은, 자체 포함, 올바른 (Compilable), 예 *] (http://sscce.org/) 게시물을 게시하여 시작할 수 있습니다. – EZI

답변

3

setter가없는 모든 속성은 항상 기본값으로 비 직렬화됩니다.

JavaScriptSerializer은 Reflection을 내부적으로 사용하여 개체를 직렬화 및 비 직렬화합니다. setter가 프로퍼티에 존재하지 않는 경우, 직렬자는이 프로퍼티의 값을 변경할 수 없습니다. 따라서 기본값으로 초기화됩니다.

위 코드에서 컬렉션은 기본값이 없으므로 비 직렬화 중에 null이 할당됩니다.