2015-05-02 1 views
1

Мне нужно сохранить неизвестную структуру данных в поле таблицы базы данных SQL Server через ORMLite. Это должно поддерживать функцию временной шкалы на веб-сайте, где каждый шаг на временной шкале содержит различную информацию, и я хочу сохранить их как общие «Шаги» с переменными данными в свойстве «StepData». У меня есть ПОКО настроить так:Анонимный объект blob в базе данных не сериализуется как JSON при запросе

public class ItemStep 
{ 
    public ItemStep() 
    { 
     this.Complete = false; 
    } 

    [Alias("ItemStepId")] 
    public Guid Id { get; set; } 

    [References(typeof(Item))] 
    public Guid ItemId { get; set; } 
    [References(typeof(Step))] 
    public int StepId { get; set; } 
    public object StepData { get; set; } 

    [Reference] 
    public Step Step { get; set; } 

    public bool Complete { get; set; } 
    public DateTime? CompletedOn { get; set; } 
} 

Мой передний конец отправить объект JSON для StepData, и она сохраняется в базе данных соответствующим образом.

{itemAmount:1000,isRed:False,isBlue:True,conversion:True} 

Теперь, когда я иду, чтобы получить эти данные, используя ...

List<ItemStep> itemSteps = Db.Select<ItemStep>(q => q.ItemId == request.ItemId).OrderByDescending(q => q.StepId).ToList<ItemStep>(); 

... «StepData» узел ответа JSON на стороне клиента не является объектом Javascript массива, как я ожидаю. Таким образом, на (приложение AngularJS с помощью CoffeeScript) клиента,

ItemStep.getItemSteps(ItemId).then((response) -> 
    $scope.StepData = response.data.itemSteps[0].stepData 

является двойной кавычки строка из массива JSON.

"{itemAmount:1000,isRed:False,isBlue:True,conversion:True}" 

Может ли кто-нибудь помочь мне с этим? Я попытался разбор этой строки как JSON, и я не могу заставить его работать:

JSON.parse($scope.StepData) 

Я использую ту же самую методику в других областях приложения, чтобы хранить и извлекать такие вещи, как адреса, с той лишь разницей, что я вижу, что существует определенный класс Address.

Спасибо!

ответ

1

Найден эта ссылка, что решить мою проблему: https://github.com/ServiceStackV3/mythz_blog/blob/master/pages/314.md

По существу я добавил поле «Type» к классу ItemStep, и установить, что при создании новой строки (создать следующий шаг на временной шкале). Затем, когда я извлекаю эту запись, я вызываю метод, подобный «GetBody» в ссылке (GetStepData для меня), которая десериализует объект, используя сохраненный тип. Затем я возвращаю обратно в общий тип «объект» в возвращаемом POCO, чтобы я мог включать в себя несколько шагов различных типов в одном и том же вызове. Прекрасно работает!

Спасибо Mythz за сообщение в блоге!