2010-11-12 289 views
0

byrefrence ParametrizedConstructor對象下面是我的JSON字符串格式化反序列化JSON與Json.NET

{ 「aliasname的」: 「ysiCountryInfo」, 「數據類」:{ 「說明」: 「美國111」, 「守則」 : 「USA」, 「WriteOffTaxPointAdjustment」:0 「IndexationRounding」:6}}

我想反序列化對象到下面類

Explicit選項在 選項嚴格論

進口BaseApp.ysiBaseData 個進口Common.DataClasses 進口系統

命名空間數據類

Public Class JSONFormatClass(Of ItemType) 

    Private _Alias As String 
    Public Property AliasName() As String 
     Get 
      Return _Alias 
     End Get 
     Set(ByVal value As String) 
      _Alias = value 
     End Set 
    End Property 

    Private _DataClass As ItemType 
    Public Property DataClass() As ItemType 
     Get 
      Return _DataClass 
     End Get 
     Set(ByVal value As ItemType) 
      _DataClass = value 
     End Set 
    End Property 

End Class 

末命名空間

凡財產 「數據類」 是從 「Common.DataClasses」 任何類的類型。

並且這裏的所有類都有接受ByRef LoginCredential Object的參數化構造函數。

而且我的代碼如下:

昏暗loginData作爲新ysiLoginData()

With loginData 
    .Server = "xxxxx" 
    .Platform = ServerType.SqlServer 
    .Database = "xxxx"  
    .UserName = "xx" 
    .Password = "xxxxx" 
    .DeveloperMode = True 
    End With 

昏暗SessionKey作爲新ysiSessionKey(loginData)

昏暗strJSON的String = HttpUtility.UrlDecode(背景.Request.Form.ToString())

Dim objJSON As JSONFormatClass(Of ysiCountryInfo)= JsonConvert.DeserializeObject(Of JSONFormatClass(Of ysiCoun (strJSON)

json字符串格式:{「AliasName」:「ysiCountryInfo」,「DataClass」:{「Description」:「美國111」,「Code」:「usa」,「WriteOffTaxPointAdjustment」: 0,「IndexationRounding」:6}}

這裏「ysiCountryInfo」是我想轉換我的「DataClass」屬性的類類型。 「ysiCountryInfo」具有參數化的構造函數,它需要參考「ysiSessionKey」的參數。

昏暗objCountryInfo作爲新ysiCountryInfo(ysiSessionKey)

我收到錯誤爲JSON的JsonSerializerInternalReader.js文件在行#808

對象createdObject = contract.ParametrizedConstructor.Invoke(constructorParameters.Values.ToArray( ));

因爲constructorParameters.Values是空

請幫我儘快解決這個問題。

感謝 Dhiren米斯特里

回答

0

抱歉,我實施了不正確。

我已經通過修改我的通用類DataClass屬性如下解決了這個問題。

Private _DataClass As ItemType 
Public Property DataClass() As ItemType 
      Get 
       If _DataClass Is Nothing Then 
        Dim loginData As New ysiLoginData() 
        With loginData 
         .Server = "xxxx" 
         .Platform = ServerType.SqlServer 
         .Database = "xxx" 
         .UserName = "xx" 
         .Password = "xxx" 
         .DeveloperMode = True 
        End With 

        Dim SessionKey As New ysiSessionKey(loginData) 

        Dim args As Object() = {SessionKey} 

        _DataClass = DirectCast(Activator.CreateInstance("YSI.Common", String.Format("{0}", GetType(ItemType).ToString()), True, BindingFlags.Instance Or BindingFlags.Public, Nothing, args, Nothing, Nothing).Unwrap(), ItemType) 

       End If 
       Return _DataClass 
      End Get 
      Set(ByVal value As ItemType) 
       _DataClass = value 
      End Set 
     End Property