首页 > 解决方案 > 使用 C# 从不同语言的 JSON 文件中获取数据

问题描述

我尝试使用此代码将 JSON 文件中的数据获取到我的应用程序中(希伯来字母看起来像这样“??”):

        private static T PopulateData<T>(string fileName)
    {
        var file = "TestingNav.Data." + fileName;
        var assembly = Assembly.GetExecutingAssembly();
        T obj;

        var resourceStream = assembly.GetManifestResourceStream(file);
        using (var reader = new StreamReader(resourceStream, Encoding.Default))
        {
            string data = reader.ReadToEnd();
            byte[] byteArray = Encoding.Default.GetBytes(data);
            MemoryStream stream = new MemoryStream(byteArray);

            var serializer = new DataContractJsonSerializer(typeof(T));
            obj = (T)serializer.ReadObject(stream);
        }

        return obj;
    }

但是,它不适用于不同的语言,即希伯来语……尽管我确实尝试在其中放入不同类型的编码。

代码无法读取的 JSON 部分:

{
  "itemName": "Hamburger",
  "name": "Hamburger 52",
  "description": "Hamburger 52 Y/O",
  "itemDescription": "טעים מאוד hamburger with Angus beef grilled to perfection",
  "itemRating": 4.5
},

更新:

        private static T PopulateData<T>(string fileName)
    {
        var file = "TestingNav.Data." + fileName;
        T obj;

        var assembly = IntrospectionExtensions.GetTypeInfo(typeof(T)).Assembly;
        Stream stream = assembly.GetManifestResourceStream(file);
        string text = "";
        using (var reader = new StreamReader(stream))
        {
            text = reader.ReadToEnd();
            obj = JsonConvert.DeserializeObject<T>(text);
        }

        return obj;
    }

标签: c#jsonserializationencodingmultilingual

解决方案


解决方案非常简单,感谢您提供的所有大量帮助 @Panagiotis Kanavos @dbc @Heretic Monkey

解决方案:

        private static T PopulateData<T>(string fileName)
    {
        var file = "TestingNav.Data." + fileName;
        T obj;

        var assembly = IntrospectionExtensions.GetTypeInfo(typeof(T)).Assembly;
        Stream stream = assembly.GetManifestResourceStream(file);
        string text = "";
        using (var reader = new StreamReader(stream, Encoding.GetEncoding(1255)))
        {
            text = reader.ReadToEnd();
            obj = JsonConvert.DeserializeObject<T>(text);
        }

        return obj;
    }

推荐阅读