我正在使用Newtonsoft.dll創建一個Settings.json文件。我有一個代表設置的類,我在加載應用程序時保存和反序列化時序列化。除了一件事以外,一切工作都很快速。VB.net JSON DeserializeObject錯誤BC30203
settings類包含一個名爲SpeechSynthesizer
的.NET對象。當設置被反序列化時,我在SpeechSynthesizer
的Voice
子對象上得到BC30203: Identifier expected
。這會導致反序列化返回默認的`語音'(Anna)設置而不是保存的設置對象(序列化設置對象確實按照它應該工作的方式)在此子對象正確反序列化之前的對象設置。
的JSON:
{ ......
"Speech": {
"State": 0,
"Rate": -3,
"Volume": 67,
"Voice": {
"Gender": 1,
"Age": 30,
"Name": "IVONA 2 Ruben",
"Culture": "nl-NL",
"Id": "IVONA 2 Voice Ruben22",
"Description": "IVONA 2 Ruben - Dutch male voice [22kHz]",
"SupportedAudioFormats": [],
"AdditionalInfo": {
"Language": "413",
"Name": "IVONA 2 Ruben",
"Age": "Adult",
"Gender": "Male",
"Vendor": "IVONA Software Sp. z o. o."
}
}
}
反序列化代碼:
Return JsonConvert.DeserializeObject(Of Settings)(File.ReadAllText(settingsfile))
序列化代碼:
Using _file As StreamWriter = New StreamWriter(SettingFilePath)
Dim serializer As New JsonSerializer()
serializer.Formatting = Formatting.Indented
serializer.Serialize(_file, Me)
End Using
設置代碼:
''' <summary>
''' Get or Set the properties that is used for the SpeechSynthesizer
''' </summary>
''' <returns></returns>
Public Property Speech As SpeechSynthesizer
千萬不要使用這個,但是['Voice'](https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.voice(v = vs.110).aspx)屬性是隻讀的,所以你可能只需要在你的設置中保存語音名稱,並使用具有名稱的'SpeechSynthesizer.SelectVoice',而不是嘗試序列化'SpeechSynthesizer'實例。 – Mark
馬克,Thx爲您的答覆。我從來沒有發現過它是一個'只讀'對象。我現在將'VoiceInfo'保存爲一個獨立的設置,在啓動時通過'.SelectVoice'加載它。謝謝! :-) – Gforse