JSON对象内的元素的SwiftyJSON顺序

时间:2016-02-08 22:34:27

标签: json swift entity-framework wcf-ria-services swifty-json

在与EntityFramework后端通信时,我使用SwiftyJSON序列化/反序列化JSON数据。问题是 - 对于某些端点,EF希望看到" __ type"属性以正确地将其映射到后端的.NET类。这个" __ type"属性必须是JSON对象的第一个属性。

以下是工作负载的示例:

"changeSet" : [
    {
      "OriginalEntity" : {
        "__type" : "outside_vendors_to_events:#QPWebOffice.Web",
        "revenue" : 0,
        "transactions_count" : 23,
        "id" : 8,
        "vendor" : "New",
        "event_id" : 4
      },
      "Operation" : 3,
      "Entity" : {
        "__type" : "outside_vendors_to_events:#QPWebOffice.Web",
        "revenue" : 0,
        "transactions_count" : 2,
        "id" : 8,
        "vendor" : "New",
        "event_id" : 4
      },
      "Id" : 0
    }
  ]

工作正常。但是如果由于某种原因__type将在对象中移动较低 - 服务器失败。现在,我知道你不能保证字典中元素的顺序,但是如何才能解决这个问题呢?

我在Swift中创建JSON对象:

return JSON([
    "__type": "outside_vendors_to_events:#QPWebOffice.Web",
    "event_id": eventId,
    "id": id,
    "revenue": revenue,
    "transactions_count": transactionCount,
    "vendor": name == nil ? NSNull() : name!
])

顺序似乎总是相同的,但是对于我在应用程序中的不同类,它的顺序是不同的。对于他们中的一些人 - 无论我做什么 - " __ type"将最终在JSON属性的中间。

任何想法都会非常感激。不,我无法改变服务器。

1 个答案:

答案 0 :(得分:1)

按照设计,字典在插入顺序上不稳定(迭代键时插入顺序无关紧要)EF可能会因需要JS对象的顺序而被破坏,而JS对象也未被指定。也就是说,您可以使用类似问题的答案来解决问题:Insertion-Order Dictionary (like Java's LinkedHashMap) in Swift?。除此之外,您需要自定义序列化操作(无论将您的词典转换为JSON)到特殊情况。