我有一個WSHttpBinding的WCF服務。客戶端和服務器都在.net平臺上。無法反序列化一個wcf類對象
DataContract()>
Public Class Task
<DataMember()>
Public Property UID As String
<DataMember()>
Public Property Name As String
<DataMember()>
Public Property progress As String
<DataMember()>
Public Property Type As Long
<DataMember()>
Public Property Version As String Version
<DataMember()>
Public Property Status As Long
<DataMember()>
Public Property Narr As String
<DataMember()>
Public Property Dt As Date
End Class
我打電話序列化對象,並保存到文件,以便一個功能:在Windows窗體應用程序,我調用一個函數來獲取任務,保存任務的文件,後來,因爲加載任務那以後,可以很容易地裝載到作爲對象:
Function GetSaveTask()
Dim Task_ As serv.Task = ServObj.GetTask() '' Calling Service to get Task
Dim ObStrng As String = Jserialize(Task_)
File.WriteAllText("D:\Task.ini", ObStrng)
End Function
Function LoadTask()
Dim Task_ As serv.Task
Dim ObStrng As String = File.ReadAllText("D:\Task.ini")
Task_ = Deserialize(Of serv.Task)(ObStrng)
End Function
Public Shared Function Jserialize(Of T)(ByVal obb As Object) As Object
Dim serializer As New Web.Script.Serialization.JavaScriptSerializer()
Return serializer.Serialize(obb)
End Function
Public Function Deserialize(Of T)(ByVal obb As String) As Object
Dim JavaScriptSerializer As New Web.Script.Serialization.JavaScriptSerializer()
Return JavaScriptSerializer.Deserialize(Of T)(obb)
End Function
串行化的數據在Task.ini:
[{"ExtensionData":{},"Dt":"\/Date(1490985000000)\/","Name":"Task-2017",
"Narr":null,"Status":20,"Type":0,"UID":"ABBB-KKKK","Version":"1.0.1.2","progress":20}]
我只能用System.Web.Script.Serialization.JavaScriptSerializer
。該Task_可以輕鬆序列化並保存到文件。但LoadTask()無法反序列化,並拋出一個錯誤:
的類型定義無參數的構造函數「System.Runtime.Serialization.ExtensionDataObject」
我試圖創建一個代理類與類任務相同,並將其保存到文件。但服務不斷更新DataMember。我們只更新服務參考,一切正常。所以代理類將是一個開銷,並且必須隨着服務類的變化而不斷更新(這在整個項目中是不可能的)。
爲什麼無法反序列化?有沒有辦法加載除ExtensionData之外的所有內容?