2016-09-07 14 views
0

Newtonsoft.dllを使用してSettings.jsonファイルを作成しています。私は設定を表すクラスを持っています、私は保存時に直列化し、アプリケーションをロードするときにデシリアライズします。 1つのことを除いてすべてがすばらしく速く働いています。VB.net JSON DeserializeObjectエラーBC30203

設定クラスには、SpeechSynthesizerという名前の.NETオブジェクトが含まれています。設定をデシリアライズすると、SpeechSynthesizerVoice子オブジェクトにBC30203: Identifier expectedが得られます。これにより、逆シリアル化が、保存されたものの代わりにデフォルトの `Voice '(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 

Image of the error

+0

これは決して使用しないでください。しかし、['Voice'](https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.voice(v = vs.110).aspx)プロパティは読み込み専用なので、設定にボイス名を保存し、 'SpeechSynthesizer'インスタンスをシリアル化するのではなく、名前に' SpeechSynthesizer.SelectVoice'を使用する必要があります。 – Mark

+0

あなたの返事のためにMark、Thx。 Idはそれが 'ReadOnly'オブジェクトだったことはありませんでした。 'VoiceInfo'を別の設定として保存し、起動時に' .SelectVoice'で読み込みます。どうも! :-) – Gforse

答えて

0

マークは、オブジェクトがReadOnlyそれはないDeserializeアプリケーションの起動時にDeserializing

仕事はarroundの私はと呼ばれる余分な設定を追加している可能性の意味された、指摘したように、私の質問への答えであったが、 SelectedVoice文字列として。起動時に私はSpeechSynthesizer.SelectVoice(_Settings.SelectedVoice)を使います。ユーザーが設定した音声を読み込むには。