我想将一个对象序列化为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的第三方对象。我没有实现这个方法,所以我想知道这是否在某个地方造成了一些怪异。
你能分享一些更多的信息:什么是吨'objSerializer.ConvertToType'?什么类型是价值?什么是BusinessListBase? –
Kenneth
请发布您的所有代码,whats T?你的串行器如何被调用?你只给我们一半我们需要的信息? – Liam
可能的循环引用。对于许多/任何序列化程序,它们不会很好地处理,要么静静地省略它们,要么抛出错误。 –