如何以Xamarin形式动态保存文件

时间:2018-09-03 06:31:40

标签: json xamarin.forms dependencies

我想以xamarin形式动态保存文件,然后单击一下按钮即可将该文件中包含的数据转换为json对象。

这是我创建代码并将文件内容写入该文件的代码

  public void CreateFile(LayerClass _data)
    {
        string _fileName = _path + _data.FileName;

        try
        {
            if (!File.Exists(_fileName))
            {
                File.Create(_fileName);

                DownLoadData(_data);

                WriteLayer();
            }
        }
        catch (Exception Ex)
        {
            Console.WriteLine(Ex.ToString());
        }

    }

    public async void DownLoadData(LayerClass _data)
    {
        await App.DataManager.RunAsync(_data.URL);
    }

    public void WriteLayer()
    {
        if (string.IsNullOrEmpty(App._response))
        {
            try
            {
                using (StreamWriter sw = new StreamWriter(System.IO.Path.Combine(_path, _file), false))
                {
                    sw.WriteLine(App._response);
                    sw.Close();
                }
            }
            catch (Exception ex)
            {

            }
        }
    }

当我单击按钮时,我要执行这些代码

DependencyService.Get<IHelpers>().ConvertObj(_temp.FileName);


 async Task LoadData(string file)
    {
        GeoJSONData JsonData;
        try
        {
            Assembly _assembly = typeof(Helpers).GetTypeInfo().Assembly;

            Stream _stream = _assembly.GetManifestResourceStream(file);

            if (_stream != null)
            {
                using (StreamReader _reader = new StreamReader(_stream))
                {
                    var _json = _reader.ReadToEnd();

                    JsonData = JsonConvert.DeserializeObject<GeoJSONData>(_json);
                }
            }
        }
        catch (Exception ex)
        {
            string _msg = ex.Message;
        }
    }

    public void ConvertObj(string file)
    {
        string _fullName = _path + file;
        if(File.Exists(_fullName))
        {
            LoadData(_fullName);
        }
    }

但是我在_stream中得到了空值。我该怎么做。

1 个答案:

答案 0 :(得分:1)

        var json = JsonConvert.SerializeObject(YouObj);

        /*
        optionel : you can use formatting and settings if you wish 
        var settings = new JsonSerializerSettings();
        settings.Converters.Add(new IsoDateTimeConverter
        {
            DateTimeFormat = "yyyy-MM-dd" //for example 
        });
        var json = JsonConvert.SerializeObject(YouObj, Formatting.Indented, settings);
        */


        var fileName = Path.Combine(Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "test.json");

        try
        {
            if (!File.Exists(fileName))
            {
                using (File.Create(fileName)) { }
            }

            using (var fs = File.OpenWrite(fileName))
            {
                var data = new UTF8Encoding(true).GetBytes(json);
                fs.Write(data, 0, data.Length);
            }
        }
        catch (Exception e)
        {
            //TODO: exception
        }