2010-06-04 2 views
6

JSON.NET 비 직렬화를 사용하여 데이터로 C# 개체 (ImportedProductCodesContainer)를 채우려고합니다.JSON.NET C#의 비 직렬화로 인해 빈 개체가 발생합니다.

ImportedProductCodesContainer.cs :

using Newtonsoft.Json; 

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainer 
{ 
    public ImportedProductCodesContainer() 
    { 

    } 

    [JsonProperty] 
    public ActionType Action { get; set; } 

    [JsonProperty] 
    public string ProductListRaw { get; set; } 


    public enum ActionType {Append=1, Replace}; 
} 

JSON 문자열 :

{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}} 

C# 코드 :

var serializer = new JsonSerializer(); 
var importedProductCodesContainer = 
    JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument); 

문제는 importedProductCodesContainer 위의 코드를 실행 한 후 비어 있다는 것입니다 (동작 = 0, ProductListRaw = 없는). 뭘 잘못했는지 알아 내 줄 수있어?

답변

1

레벨이 너무 많아 ImportedProductCodesContainer입니다. 새 ImportedProductCodesContainer 객체 (템플릿이있는 비 직렬화 기에서)를 만들고 나서 다른 두 값을 포함하는 구조체 인 ImportedProductCodesContainer (JSON의 최상위 수준에서)이라는 속성을 설정하려고합니다. 당신이 내부를 역 직렬화하는 경우에만

{"ProductListRaw":"1 23","Action":"Append"} 

는 당신이 기대하고있는 객체를 얻어야한다, 또는 당신은 ImportedProductCodesContainer 속성

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainerWrapper 
{ 
    [JsonProperty] 
    public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; } 
} 

로 새로운 구조체를 만들고 그 다음으로 디시리얼라이저를 템플릿 수 원래 JSON이 작동해야합니다.

JSON 라이브러리와 함께 다른 속성/플래그를 사용하여이 동작을 변경할 수도 있지만 잘 말할 수는 없습니다.

+0

감사합니다. –

관련 문제