首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何不向Json传递英文字母

如何不向Json传递英文字母
EN

Stack Overflow用户
提问于 2021-11-03 16:15:13
回答 3查看 103关注 0票数 2

我正在为安卓和iOS开发一个Xamarin Forms应用程序

我正在尝试找出如何将非英文字母传递给Json文件。

我的语言是瑞典语,每当我使用像(?,?,?)这样的字符时,应用程序就会崩溃。

那么我该如何解决这个问题呢?

DrawerViewModel.cs

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
{
    "itemList": [
     {
         "itemIcon": "\ue729",
         "itemName": "Länd"
      },
      {
          "itemIcon": "\ue72c",
          "itemName": "Höjd"
      },
      {
          "itemIcon": "\ue733",
          "itemName": "Mått"
      },
      {
          "itemIcon": "\ue72b",
          "itemName": "Inställningar"
      }
  ]
}
EN

Stack Overflow用户

发布于 2021-11-03 17:21:12

出于好奇,我找到了另一个解决方案:使用JsonSerializerhttps://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-character-encoding

代码语言:javascript
运行
复制
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命令行界面(命令行界面)执行此操作:

代码语言:javascript
运行
复制
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.0netstandard2.1框架中。

如何查看我的目标是netstandard2.0还是netstandard2.1

当您查看.csproj文件时,您应该看到如下所示的行:

代码语言:javascript
运行
复制
<TargetFramework>netstandard2.0</TargetFramework>

代码语言:javascript
运行
复制
<TargetFramework>netstandard2.1</TargetFramework>

如果<TargetFramework>包含另一个值,那么您很可能不需要添加System.Text.Json Nuget包。

票数 0
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69828242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档