0

我正在尝试将一个对象序列化为 JSON,但无法弄清楚为什么要省略一大堆属性。作为参考,我尝试使用 DataContractJsonSerializerfor 同样无济于事,因为它会生成一个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 的第三方对象。我没有实施这种方法,所以我想知道这是否在某处引起了一些奇怪。

4

1 回答 1

-1

you can use newtonsoft json converter. It is easy to use and serializes in just a few lines

tring jsonOutput = JsonConvert.SerializeObject(obj, conv);
于 2013-04-15T13:19:13.700 回答