我正在为安卓和iOS开发一个Xamarin Forms应用程序
我正在尝试找出如何将非英文字母传递给Json文件。
我的语言是瑞典语,每当我使用像(?,?,?)这样的字符时,应用程序就会崩溃。
那么我该如何解决这个问题呢?
DrawerViewModel.cs
class DrawerViewModel : BaseViewModel {
     ...
     public static DrawerViewModel BindingContext => 
        drawerViewModel = PopulateData<DrawerViewModel>("drawer.json");
     ...
     private static T PopulateData<T>(string fileName)
    {
        var file = "CykelStaden.Data." + fileName;
        var assembly = typeof(App).GetTypeInfo().Assembly;
        T data;
        using (var stream = assembly.GetManifestResourceStream(file))
        {
            var serializer = new DataContractJsonSerializer(typeof(T));
            data = (T)serializer.ReadObject(stream);
        }
        return data;
    }
     
}drawer.json
{
    "itemList": [
     {
         "itemIcon": "\ue729",
         "itemName": "Länd"
      },
      {
          "itemIcon": "\ue72c",
          "itemName": "Höjd"
      },
      {
          "itemIcon": "\ue733",
          "itemName": "Mått"
      },
      {
          "itemIcon": "\ue72b",
          "itemName": "Inställningar"
      }
  ]
}发布于 2021-11-03 17:21:12
出于好奇,我找到了另一个解决方案:使用JsonSerializer的https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-character-encoding
public class DrawerItem
{
    [JsonPropertyName("itemIcon")]
    public string Icon { get; set; }
    [JsonPropertyName("itemName")]
    public string Name { get; set; }
}
public class DrawerItemList
{
    private static readonly JsonSerializerOptions _serializerOptions = new JsonSerializerOptions
    {
        // This Encoder allows to parse Unicode Symbols without \uXXXX escaping
        Encoder = JavaScriptEncoder.Create(UnicodeRanges.All)
    };
    [JsonPropertyName("itemList")]
    public IEnumerable<DrawerItem> DrawerItems { get; set; }
    public static DrawerItemList LoadFromEmbeddedJsonFile(CancellationToken cancellationToken = default)
    {
        return LoadFromEmbeddedJsonFileAsync(cancellationToken).Result;
    }
    public static async Task<DrawerItemList> LoadFromEmbeddedJsonFileAsync(CancellationToken cancellationToken = default)
    {
        const string ManifestResourceName = "CykelStaden.Data.drawer.json";
        var assembly = Assembly.GetExecutingAssembly();
        using (var stream = assembly.GetManifestResourceStream(ManifestResourceName))
        {
            return await JsonSerializer.DeserializeAsync<DrawerItemList>(stream, _serializerOptions, cancellationToken); 
        }
    }
}让它与Xamarin/netstandard2.0/netstandard2.1一起工作
重要信息:要在Xamarin项目中实现此功能,必须引用System.Text.Json Nuget包。(https://www.nuget.org/packages/System.Text.Json)。
您可以使用.NET命令行界面(命令行界面)执行此操作:
dotnet add package System.Text.Json这样做的原因是System.Text.Json应用编程接口首先随.NET Core3 (https://devblogs.microsoft.com/dotnet/try-the-new-system-text-json-apis/)一起发布,因此没有包含在.NET Core3之前存在的netstandard2.0或netstandard2.1框架中。
如何查看我的目标是netstandard2.0还是netstandard2.1
当您查看.csproj文件时,您应该看到如下所示的行:
<TargetFramework>netstandard2.0</TargetFramework>或
<TargetFramework>netstandard2.1</TargetFramework>如果<TargetFramework>包含另一个值,那么您很可能不需要添加System.Text.Json Nuget包。
https://stackoverflow.com/questions/69828242
复制相似问题