使用json代替resw文件

前言

在写WinUI 3或UWP项目的时候,总觉得resw文件冗长可读性又差,希望要是能用json就好了。 我在测试MakePri.exe1的时候意外发现了它支持一种叫resjson的文件,可以用以取代resw。

本文假定读者以有resw2的使用基础。

priconfig.xml部分内容:

1
2
<indexer-config type="resw" convertDotsToSlashes="true" initialPath=""/>
<indexer-config type="resjson" initialPath=""/>

对比

resjson虽然没有可视化编辑器,但它可读性十分高,可以直接用文本编辑器编辑。 相对而言resw文本可读性很低,几乎只能用可视化编辑器编辑。

resjson不支持注释,但其实注释除了可视化编辑器内其他地方都用不到,所以并没有什么用处。

另外用于x:Uid的属性写法,如TextBox.Text,在resjson中须将换成斜杠,即TextBox/Text。 因为resjson默认没有设置convertDotsToSlashes

语法

resjson的语法是标准json,但文件后缀名必须是resjson,而且内容只能包含简单的单个json对象,成员是字符串键和字符串值,如:

1
2
3
4
5
{
"String1": "字符串1内容",
"TextBox2/Text": "字符串2",
"TextBox2/AutomationProperties/Name": "字符串3"
}

也许大家注意到了第三句在resw里得写成:

1
TextBox2.[using:Windows.UI.Xaml.Automation]AutomationProperties.Name

然而方括号内的部分(附加属性)在resjson完全不需要写,并且效果是一样的,不理解为什么微软要求resw加上命名空间。

引用

引用方法和resw完全一致,放在指定位置并引用后,使用x:Uid或者ResourceLoader引用即可。


  1. MakePri.exe↩︎

  2. 本地化字符串↩︎