Десериализация JSON в объект ParametrizedConstructor по ссылке с помощью Json.NET

Ниже моя строка в формате JSON

{"AliasName": "ysiCountryInfo", "DataClass": {"Description": "United States 111", "Code": "usa", "WriteOffTaxPointAdjustment": 0, "IndexationRounding": 6}}

Я хотел бы десериализовать объект в класс ниже

Option Explicit On Option Strict On

Импорт 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

Конец пространства имен

Где Свойство «DataClass» - это тип любого класса из «Common.DataClasses».

И весь класс в этом имеет параметризованный конструктор, который принимает объект ByRef LoginCredential.

И мой код ниже:

Уменьшить значение loginData как новое ysiLoginData ()

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

Dim SessionKey как новый ysiSessionKey (loginData)

Dim strJSON As String = HttpUtility.UrlDecode (context.Request.Form.ToString ())

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

Формат строки json: {"AliasName": "ysiCountryInfo", "DataClass": {"Description": "United States 111", "Code": "usa", "WriteOffTaxPointAdjustment": 0, "IndexationRounding": 6}}

здесь «ysiCountryInfo» - это тип класса, в который я хотел бы преобразовать свое свойство «DataClass». «ysiCountryInfo» имеет параметризованный конструктор, которому требуется параметр «ysiSessionKey» по ссылке.

Dim objCountryInfo как New ysiCountryInfo (ysiSessionKey)

Я получаю сообщение об ошибке в файле JsonSerializerInternalReader.js JSON в строке № 808.

объект createdObject = contract.ParametrizedConstructor.Invoke (constructorParameters.Values.ToArray ());

Поскольку constructorParameters.Values ​​имеет значение Null

Пожалуйста, помогите мне решить эту проблему как можно скорее.

Спасибо Дхирен Мистри


person dhiren mistry    schedule 12.11.2010    source источник


Ответы (1)


Извините, я реализовал это неправильно.

Я решил эту проблему, изменив свойство Generic Class 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
person dhiren mistry    schedule 13.11.2010