2013-04-15 139 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