使用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;
    }

解决方法

解决方案非常简单,谢谢您的所有大力帮助@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;
    }