【问题标题】:SwiftyJSON order of elements inside JSON objectJSON对象内元素的SwiftyJSON顺序
【发布时间】:2016-02-08 22:34:26
【问题描述】:

在与 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 属性的中间。

任何想法将不胜感激。不,我不能改变服务器。

【问题讨论】:

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


    【解决方案1】:

    根据设计,字典在插入顺序上不稳定(迭代键时插入顺序无关紧要) EF 在要求 JS 对象的顺序时可以说是被破坏了,这也没有指定。也就是说,您可以使用类似以下问题的答案来解决问题:Insertion-Order Dictionary (like Java's LinkedHashMap) in Swift?。除此之外,您需要自定义您的序列化操作(无论将您的字典转换为 JSON 的方式)以适应这种特殊情况。

    【讨论】:

    • 谢谢。由于它只是 JSON -> 字符串序列化,我最终从我的 JSON 对象手动创建字符串。我讨厌它,但这似乎是摆脱这种混乱的最简单方法。
    • 在处理损坏的技术时,通常最好是务实的:)
    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多