Newtonsoft.dllを使用してSettings.jsonファイルを作成しています。私は設定を表すクラスを持っています、私は保存時に直列化し、アプリケーションをロードするときにデシリアライズします。 1つのことを除いてすべてがすばらしく速く働いています。VB.net JSON DeserializeObjectエラーBC30203
設定クラスには、SpeechSynthesizer
という名前の.NETオブジェクトが含まれています。設定をデシリアライズすると、SpeechSynthesizer
のVoice
子オブジェクトに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
これは決して使用しないでください。しかし、['Voice'](https://msdn.microsoft.com/en-us/library/system.speech.synthesis.speechsynthesizer.voice(v = vs.110).aspx)プロパティは読み込み専用なので、設定にボイス名を保存し、 'SpeechSynthesizer'インスタンスをシリアル化するのではなく、名前に' SpeechSynthesizer.SelectVoice'を使用する必要があります。 – Mark
あなたの返事のためにMark、Thx。 Idはそれが 'ReadOnly'オブジェクトだったことはありませんでした。 'VoiceInfo'を別の設定として保存し、起動時に' .SelectVoice'で読み込みます。どうも! :-) – Gforse