我正在尝试将一个对象序列化为 JSON,但无法弄清楚为什么要省略一大堆属性。作为参考,我尝试使用 DataContractJsonSerializer
for 同样无济于事,因为它会生成一个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 代码的调用工作正常,但生成的字符串仅包含 forBasketItem
和 not的属性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 对象
我可以打电话给
((Basket)BasketManager.SessionBasket).GrandTotalIncVAT
它包含一个值。
但是,当我对此进行序列化时,只有 BasketItem 的成员作为列表而没有 Basket,因此 GrandTotalIncVAT 不会出现。
为了回答您的问题,BusinessListBase 是 CSLA.NET 的第三方对象。我没有实施这种方法,所以我想知道这是否在某处引起了一些奇怪。