Десериализация JSON в объект ParametrizedConstructor с использованием Json.NET - PullRequest
0 голосов
/ 12 ноября 2010

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

{"AliasName": "ysiCountryInfo", "DataClass": {"Описание": "США 111", "Код": "США", "WriteOffTaxPointAdjustment": 0, "IndexationRounding": 6}}

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

Параметр Явный Вкл. Опция Строгое Вкл.

Импортирует BaseApp.ysiBaseData Импортирует Common.DataClasses Импорт систем

Пространство имен 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».

И все классы в этом имеют Parametrized конструктор, который принимает ByRef LoginCredential Object.

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

Dim loginData As New ysiLoginData ()

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

Dim SessionKey As New 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": {"Описание": "Соединенные Штаты 111", "Код": "США", "WriteOffTaxPointAdjustment": 0, "IndexationRounding": 6 }}

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

Dim objCountryInfo as New ysiCountryInfo (ysiSessionKey)

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

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

Поскольку constructorParameters.Values ​​равен Null

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

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

1 Ответ

0 голосов
/ 13 ноября 2010

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

Я решил эту проблему, изменив свое свойство универсального класса 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
...