查询时数据库中的匿名对象 blob 未序列化为 JSON

Anonymous object blob in database not serializing as JSON when queried

我需要通过 ORMLite 在 SQL 服务器数据库 table 字段中存储未知数据结构。这是为了支持网站上的时间轴功能,其中时间轴上的每个步骤都包含不同的信息,我想将它们存储为通用 "Steps",可变数据在 "StepData" 属性 .我的 POCO 设置如下:

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; }
}

我的前端为 StepData 发送了一个 JSON 对象,它被适当地保存到数据库中。

{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>();

...客户端 JSON 响应的 "StepData" 节点不是我期望的 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)

我在应用程序的其他区域使用完全相同的方法来存储和检索地址之类的东西,唯一的区别是我看到有一个指定的地址 class。

谢谢!

发现这个 link 解决了我的问题:https://github.com/ServiceStackV3/mythz_blog/blob/master/pages/314.md

基本上,我在 ItemStep class 中添加了一个 "Type" 字段,并在我创建新行时设置它(在时间轴中创建下一步)。然后,当我检索该记录时,我在引用的 link 中调用类似 "GetBody" 的方法(对我来说是 GetStepData),该方法使用存储的类型反序列化对象。然后,我将其填充回 return POCO 中的通用 "object" 类型,以便我可以在同一个调用中包含不同类型的许多步骤。效果很好!

感谢 Mythz 的博客 post!