2017-01-20 127 views
0

遇到問題從一個C#解序列化對象,然後堅持它,並用另一種解決方案撿起來,然後直接在反序列化到相同的對象類型不同的方案。如何共享不同的解決方案之間的共同目標,但他們仍然需要同

將對象轉移到它的持久位置時,它也會將其對象類型與原始名稱空間保持一致,這顯然不同於我嘗試將其重新排序/序列化到的共享公共對象的名稱空間,因爲它們是不同的解決方案(即使類是相同的屬性和相同的名稱)。

共享類,引用通用類,和/或連接類似乎並沒有成爲解決(除非我做不正確的話),因爲當它撿起來備份它仍然可以看到父命名空間不同,因爲他們來自不同的解決方案,因此在嘗試對其進行反序列化時會產生錯誤,因爲它認爲它是不同的類型。

原因 - 爲了能夠直接反序列成它的原始對象類型,但在不同的項目的解決方案。

任何見解或建議表示讚賞。謝謝

環境:Visual Studio的2015年,.NET的核心,C#(測試在控制檯應用程序)

回答

2

您可以創建一個類庫和項目之間共享,或者你可以在每邊序列化對象JSON和具有等價類。

你沒有提到你使用什麼樣的機制來序列化,但我假設這是你使用的是二進制序列化。如果需要二進制序列化,共享的類庫是您的最佳選擇。

+0

我利用Newtonsoft.JsonConvert <>(),然後指定所述對象類型的方法中,和傳球將序列化的字符串數據傳遞給方法。但是,由於它是從另一個解決方案進入的,它對於原始對象具有不同的名稱空間。 – CodingRiot

+0

JsonConvert不存儲名稱空間。您指定的對象類型是否與解序列相同? – MikeS

+0

@CodingRiot Json.Net默認不包含名稱空間,除非您在設置中爲「TypeNameHandling」指定值 - 您有什麼值? – stuartd

1

創建Class Library(爲.Net Core)項目。創建您想要在項目之間傳輸的類(或接口或您想共享的其他內容)。

然後在需要該類的每個項目添加引用該庫。使用庫命名空間添加using指令,您可以使用這些類。

1

如果你不想共享類,或者如果你需要其他的選項,那麼你可以使用不關心原始類型,而是其與上述數據它的兼容性Serializatoin /反序列化機制。與默認的Json.Net一樣。

序列化在一個解決方案:

var jsonSerializedString = JsonConvert.SerializeObject(myObjectInAssemblyA); 

反序列化在其它的解決方案:

objectInAssemblyB = JsonConvert.DeserializeObject<ObjectClassName>(jsonSerializedString); 
+0

@CodingRiot這些類是否存在於不同的解決方案/程序集中,或者它們的名稱是否不同。重要的是屬性名稱,類型和訪問修飾符。他們需要是一樣的。 另外構造函數可能是一個問題(如果你有多個沒有默認值),但這也可以用Json.Net解決。 – m1o2

+0

對不起,我應該提到我試圖通過泛型直接通過泛型將它們用於方法 - 但由於它們處於不同的解決方案,因此它們的「類型」被視爲不同,而不使用Newtonsoft Json解決方案進行轉換。我必須使用Newtonsoft Json解決方案來解決問題,但我希望在解決方案之間傳遞對象,而不必在可能的情況下使用Newtonsoft轉換它們 – CodingRiot

相關問題