2013-04-15 10 views
0

Я пытаюсь сериализовать объект в 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); } 
    } 
} 

код у меня есть для serialising в 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

Не могли бы вы поделиться больше информации: Что такое T в '' objSerializer.ConvertToType ? Какой тип значения? Что такое BusinessListBase? – Kenneth

+0

Пожалуйста, напишите весь ваш код, whats T? Как вызван ваш сериализатор? Вы только предоставили нам половину информации, которая нам нужна здесь? – Liam

+0

Циркулярные ссылки, возможно. Они не будут обработаны красиво, будь то много/любой сериализатор (ы), либо опустив их молча, либо выбросив ошибку. –

ответ

-1

вы можете использовать конвертер newtonsoft json. Он прост в использовании и упорядочивает в несколько линий

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

Я использую сериализатор NewtonSoft, и он работает очень хорошо, спасибо за рекомендацию. – superman1971

+0

Пожалуйста, отметьте это как ответ, поскольку это помогло – puneet