我正在尝试将对象序列化为JSON,并且无法弄清楚为什么要忽略一大堆属性。作为参考,我尝试使用DataContractJsonSerializer
同样无效,因为它会生成StackOverflowException
。
基本上,我有一个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)
和Serializer只是: -
public static string ToJson<T>(this T value)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(value, Formatting.Indented);
}
因此,这种情况下的值是Basket对象,它存储为BasketManager.SessionBasket
我可以打电话给
((Basket)BasketManager.SessionBasket).GrandTotalIncVAT
并且它包含一个值。
然而,当我序列化时,只有BasketItem的成员作为列表而没有篮子,因此不会出现GrandTotalIncVAT。
要回答您的问题,BusinessListBase是CSLA.NET的第三方对象。我没有实现这种方法,所以我想知道这是否会在某处造成一些奇怪。
答案 0 :(得分:-1)
你可以使用newtonsoft json转换器。它易于使用,只需几行序列化
tring jsonOutput = JsonConvert.SerializeObject(obj, conv);