2013-04-15 103 views
0

我想將一個對象序列化爲JSON,但無法弄清楚爲什麼會忽略一大堆屬性。作爲參考,我曾嘗試使用DataContractJsonSerializer同樣無濟於事,因爲它會生成StackOverflowException將對象序列化爲JSON

從本質上講,我有一個Basket對象: -

public class Basket : BusinessListBase<Basket, BasketItem> 
{ 
    private Voucher _voucher; 
    public Voucher Voucher; 

    public decimal GrandTotalIncVat 
    { 
     get { return Math.Round(BasketTotalIncVat + DeliveryTotalIncVat, 2); } 
    } 
} 

我有連載到JSON的代碼是: -

JavaScriptSerializer objSerialiser = new JavaScriptSerializer(); 
StringBuilder objSB = new StringBuilder(); 
objSerialiser.ConvertToType<T>(value); 
objSerialiser.Serialize(value, objSB); 
return objSB.ToString(); 

來此JSON代碼調用工作正常,但生成的字符串只包含BasketItem而不是Basket的屬性,這真的是我想要的。

這裏有什麼問題?

我現在打電話串行有: -

universalVariableBase.BasketData = BasketManager.SessionBasket; 
JsonHelper.ToJson<Core.UniversalVariable>(universalVariableBase) 

和串行很簡單: -

public static string ToJson<T>(this T value) 
{ 
    return Newtonsoft.Json.JsonConvert.SerializeObject(value, Formatting.Indented); 
} 

因此,在這種情況下,該值被存儲爲BasketManager籃子對象。 SessionBasket

,我可以調用類似

((Basket)BasketManager.SessionBasket).GrandTotalIncVAT 

它包含一個值。

但是,當我序列化這個時,只有BasketItem的成員作爲列表,沒有Basket,所以GrandTotalIncVAT沒有出現。

要回答你的問題,BusinessListBase是來自CSLA.NET的第三方對象。我沒有實現這個方法,所以我想知道這是否在某個地方造成了一些怪異。

+0

你能分享一些更多的信息:什麼是噸'objSerializer.ConvertToType '?什麼類型是價值?什麼是BusinessListBase? – Kenneth

+0

請發佈您的所有代碼,whats T?你的串行器如何被調用?你只給我們一半我們需要的信息? – Liam

+0

可能的循環引用。對於許多/任何序列化程序,它們不會很好地處理,要麼靜靜地省略它們,要麼拋出錯誤。 –

回答

-1

你可以使用newtonsoft json轉換器。這是很容易使用,並在短短的幾行

連載
tring jsonOutput = JsonConvert.SerializeObject(obj, conv); 
+0

我使用的是NewtonSoft串行器,它的工作非常好,謝謝你的建議。 – superman1971

+0

請標記爲答案,因爲它有幫助 – puneet