如何实现从.NET到UWP的跨平台SRGs语法

How to implement cross-platform SRGs grammar from .NET to UWP

我有两个相互远程通信的应用程序。一个应用程序(称为 "A")需要为远程 UWP 应用程序(称为此应用程序 "B")中的语音识别引擎 运行 定义一些自定义语法。我想使用自定义 class 来封装语法规则以及一些其他辅助数据,因为这个 class 必须在完整的 .NET 框架 (4.7) 和 UWP 框架之间交叉考虑将其实现到两个应用程序都引用的 .NET Standard 2.0 class 库中。至于语法,最好的方法似乎是将 SRGS 约束指定为 XML (https://docs.microsoft.com/en-us/windows/uwp/design/input/define-custom-recognition-constraints),因为应用程序 A 和 B 都可以创建 Xml。我预计 Xml 要么以编程方式创建,要么从文件加载。封装的自定义语法对象将在应用程序 A 上创建,然后传输到应用程序 B,通常看起来像这样:

public class MyCustomGrammarStuff()
{
    public Int32 Data1 { get; set; }
    public Int32 Data2 { get; set; }
    public String Stuff { get; set; }
    public XmlDocument GrammarRules {get; set; } // Loaded from file or created in code.
}

当应用程序 A 收到此对象时,它必须使用 "MyCustomGrammarStuff" 对象中的 "GrammarRules" 实例化一个 "SpeechRecognitionGrammarFileConstraint" 对象。根据此 class (https://docs.microsoft.com/en-us/uwp/api/Windows.Media.SpeechRecognition.SpeechRecognitionGrammarFileConstraint) 的文档,构造函数采用 "Windows.Storage.StorageFile".

类型的参数

我的问题是如何获取 XmlDocument 对象并使用它以编程方式实例化 StorageFile 对象?我不想从临时文件开始做 writing/loading 之类的事情。

如果你想要 StorageFile,你可以在某个文件夹中创建一个,然后将所有 XML 数据写入其中,如下所示:

XmlDocument xmlDocument = ...;
StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync("filename.xml");
await FileIO.WriteTextAsync(file, xmlDocument.ToString());