将对象序列化为JSON

时间:2013-04-15 13:13:26

标签: c# json.net javascriptserializer

我正在尝试将对象序列化为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的第三方对象。我没有实现这种方法,所以我想知道这是否会在某处造成一些奇怪。

1 个答案:

答案 0 :(得分:-1)

你可以使用newtonsoft json转换器。它易于使用,只需几行序列化

tring jsonOutput = JsonConvert.SerializeObject(obj, conv);