2014-11-12 5 views
0

Я сделал это, чтобы преобразовать форматированную строку JSON в объект VB.NET.Чтение строки JSON для VB .NET Object

Я не могу найти, почему это не сработает!

jsonSettingsWrapper.vb

Public Class jsonSettingsWrapper 
    'Public setting As jsonSettings 
    Public Property setting As jsonSettings 
     Get 
      Return m_setting 
     End Get 
     Set(value As jsonSettings) 
      m_setting = value 
     End Set 
    End Property 
    Private m_setting As jsonSettings 
End Class 

Public Class jsonSettings 
    Public Property root_folder_path As String 
     Get 
      Return m_root_folder_path 
     End Get 
     Set(value As String) 
      m_root_folder_path = value 
     End Set 
    End Property 
    Private m_root_folder_path As String 

    Public Property ignored_files As String() 
     Get 
      Return m_ignored_files 
     End Get 
     Set(value As String()) 
      m_ignored_files = value 
     End Set 
    End Property 
    Private m_ignored_files As String() 

    Public Property last_pack_date As String 
     Get 
      Return m_last_pack_date 
     End Get 
     Set(value As String) 
      m_last_pack_date = value 
     End Set 
    End Property 
    Private m_last_pack_date As String 

    Public Property last_push_date As String 
     Get 
      Return m_last_push_date 
     End Get 
     Set(value As String) 
      m_last_push_date = value 
     End Set 
    End Property 
    Private m_last_push_date As String 

    Public Property no_of_packs As Integer 
     Get 
      Return m_no_of_packs 
     End Get 
     Set(value As Integer) 
      m_no_of_packs = value 
     End Set 
    End Property 
    Private m_no_of_packs As Integer 

    Public Property packs_array As packs() 
     Get 
      Return m_packs_array 
     End Get 
     Set(value As packs()) 
      m_packs_array = value 
     End Set 
    End Property 
    Private m_packs_array As packs() 
End Class 

Public Class packs 
    Public Property filename As String 
     Get 
      Return m_filename 
     End Get 
     Set(value As String) 
      m_filename = value 
     End Set 
    End Property 
    Private m_filename As String 

    Public Property pack_date As String 
     Get 
      Return m_pack_date 
     End Get 
     Set(value As String) 
      m_pack_date = value 
     End Set 
    End Property 
    Private m_pack_date As String 
End Class 

Form1.vb

Imports System.Web.Script.Serialization 
Imports WindowsApplication1.jsonSettingsWrapper 

Public Class Form1 

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
     Dim ser As New JavaScriptSerializer 
     Dim settingsString As String = IO.File.ReadAllText("settings.json") 
     MsgBox(settingsString) 
     Dim settings = ser.Deserialize(Of jsonSettingsWrapper)(settingsString) 
     MsgBox(settings.setting) 'empty 
     MsgBox(settings.setting.root_folder_path) 
     '^^ Error: A first chance exception of type 'System.NullReferenceException' occurred in FilesSync.exe 
    End Sub 

Как уже упоминалось в комментариях к коду, ошибка происходит, когда это пытаются получить доступ к некоторым из его стоимости. Может ли кто-нибудь рассказать о том, почему это происходит. Где я делаю это неправильно?

EDIT: JSON я использовал:

{"settings": { 
    "root_folder_path": "ab", 
    "ignored_files": [ 
     "cd", 
     "ef" 
    ], 
    "last_pack_date": "12", 
    "last_push_date": "21", 
    "no_of_packs": 3, 
    "packs_array": [ 
     { 
      "filename": "aa", 
      "pack_date": "21" 
     } 
    ] 
}} 
+0

Я бы рекомендовал использовать библиотеку для разбора JSON, например JSON.NET, если у вас нет конкретной необходимости сделать это самостоятельно. –

+0

Вы должны показать пример строки JSON –

+0

@the_lotus: Отредактировано – cipher

ответ

0

Ваш JSON использовать имя свойства «настройки», но ваш класс использует «настройки», изменить свой класс, чтобы использовать правильное название

Public Class jsonSettingsWrapper 
    'Public setting As jsonSettings 
    Public Property settings() As jsonSettings 
     Get 
      Return m_setting 
     End Get 
     Set(ByVal value As jsonSettings) 
      m_setting = value 
     End Set 
    End Property 
    Private m_setting As jsonSettings 
End Class 

или использовать DataContract

Смежные вопросы