2010-06-04 11 views
6

मैं JSON.NET deserialization का उपयोग कर डेटा के साथ एक सी # ऑब्जेक्ट (आयातित उत्पादकोडकेंटर) को पॉप्युलेट करने का प्रयास कर रहा हूं।सी # परिणामों में JSON.NET Deserialization खाली ऑब्जेक्ट में

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"}} 

सी # कोड:

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

समस्या यह है कि importedProductCodesContainer ऊपर कोड चलाने के बाद खाली रह जाता है (एक्शन = 0, ProductListRaw = शून्य)। क्या आप कृपया यह जानने में मदद कर सकते हैं कि क्या गलत है?

उत्तर

1

आपके पास ImportedProductCodesContainer का एक बहुत अधिक स्तर है। यह एक नया ImportedProductCodesContainer ऑब्जेक्ट (टेम्पलेटेड deserializer से) बना रहा है और उसके बाद ImportedProductCodesContainer (अपने JSON के शीर्ष स्तर से) पर एक संपत्ति सेट करने का प्रयास कर रहा है जो एक अन्य संरचना वाले संरचना होगी। आप भीतरी भाग deserialize अगर केवल

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

तो आप वस्तु आप उम्मीद कर रहे हैं मिलना चाहिए, या आप एक ImportedProductCodesContainer संपत्ति

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

के साथ एक नया struct बना सकते हैं और है कि तब के साथ अपने deserializer टेम्पलेट कर सकते हैं आपका मूल JSON काम करना चाहिए।

उस JSON लाइब्रेरी के साथ अन्य विशेषताओं/झंडे का उपयोग करके इस व्यवहार को बदलना भी संभव हो सकता है लेकिन मुझे यह कहना पर्याप्त नहीं है।

+0

धन्यवाद, यह काम किया! –