2016-02-08 126 views
0

我使用SwiftyJSON序列化/反序列化與EntityFramework後端通信時的JSON數據。問題是 - 對於某些端點,EF期望看到「__type」屬性將其正確映射到後端的.NET類。而這個「__type」屬性必須是是JSON對象的第一個屬性。SwiftyJSON順序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會在對象中移動得更低 - 服務器失敗。現在,我知道你不能保證字典中元素的順序,但是還有什麼可以解決的呢?

我創建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

按照設計,字典在插入順序上不穩定(迭代鍵時插入順序無關緊要)EF在需要JS對象的順序時可以被破壞,這也沒有被指定。也就是說,你可以用這個問題的答案來解決問題:Insertion-Order Dictionary (like Java's LinkedHashMap) in Swift?。除此之外,您需要自定義您的序列化操作(無論將您的字典轉換爲JSON)爲特殊情況。

+0

謝謝。由於它只是JSON - >字符串序列化我最終從我的JSON對象手動創建字符串。我討厭它,但它似乎是擺脫這個混亂的最簡單的方式。 – sha

+1

當處理破碎的技術時,通常最好務實:) –