我必须序列化和反序列化另一个程序使用的JSON字符串.
我对JSON知之甚少,所以请对我温柔点.
另一个程序使用NewtonSoft.JSON来做这件事,但这是我唯一需要NewtonSoft.JSON做的事情,所以我宁愿不使用NewtonSoft.JSON来做这件事,所以我的程序中不必包括DLL.
另一个程序的序列化如下所示:
Class TestSettings
Public Setting1 As Byte()
Public Setting2 As Byte()
End Class
Dim SettingsObj As Object = New TestSettings
SettingsObj.Setting1 = Encoding.ASCII.GetBytes("This is setting 1")
SettingsObj.Setting2 = Encoding.ASCII.GetBytes("This is setting 2")
Dim JSONString As String = JsonConvert.SerializeObject(SettingsObj)
'JSONString = {""Setting1"":""VGhpcyBpcyBzZXR0aW5nIDE="",""Setting2"":""VGhpcyBpcyBzZXR0aW5nIDI=""}
并像这样反序列化:
'Just setting this to demonstrate.
Dim JSONContents As String = " {""Setting1"":""VGhpcyBpcyBzZXR0aW5nIDE="",""Setting2"":""VGhpcyBpcyBzZXR0aW5nIDI=""}"
Dim ReadsettingsObj = CType(JsonConvert.DeserializeObject(JSONContents, GetType(TestSettings)), TestSettings)
Dim Setting1String As String = Encoding.ASCII.GetString(ReadsettingsObj.Setting1)
Dim Setting2String As String = Encoding.ASCII.GetString(ReadsettingsObj.Setting2)
'Setting1String = "This is setting 1"
'Setting2String = "This is setting 2"
我已经try 了以下序列化:
Dim SettingsObj2 As Object = New TestSettings
SettingsObj2.Setting1 = Encoding.ASCII.GetBytes("This is setting 1")
SettingsObj2.Setting2 = Encoding.ASCII.GetBytes("This is setting 2")
Dim jss = New JavaScriptSerializer
Dim JSONString2 As String = jss.Serialize(SettingsObj2)
'JSONString2 = {""Setting1"":[84,104,105,115,32,105,115,32,115,101,116,116,105,110,103,32,49],""Setting2"":[84,104,105,115,32,105,115,32,115,101,116,116,105,110,103,32,50]}
...如您所见,返回的字符串不同,对于反序列化,我try 了:
Dim jss2 As New JavaScriptSerializer
Dim Items = jss2.Deserialize(JSONContents, GetType(TestSettings))
'The line about throws an exception of "Cannot convert object of type 'System.String' to type 'System.Byte[]'"
Dim Setting1String2 As String = Encoding.ASCII.GetString(Items.Setting1)
Dim Setting2String2 As String = Encoding.ASCII.GetString(Items.Setting2)
...如果能帮助我们进行序列化和反序列化,并获得与Newtonsoft.JSON相同的输出,我们将不胜感激.