C#WPF-创建在启动时加载JSON文件的对象

时间:2019-06-02 13:03:04

标签: c# json wpf

我正在制作一个创建对象的C#WPF程序,该对象将在实例化时读取存储的JSON文件。像这样:

namespace CodeTester
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            data_init data = new data_init("C:\test.json")
        }
    }
}

data_init是读取json文件并进行解析的对象,而构造函数唯一需要的参数是文件路径。如图所示,我将其放入MainWindow构造函数中,由于某种原因我的程序将无法加载,MainWindow构造函数中出现错误,所以我知道这就是问题所在。

在哪里可以实例化此对象而不会引起错误?

感谢您的帮助!

编辑:这是我得到的错误:

Process is terminated due to StackOverflowException.
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll

我尝试实现以下内容以捕获错误,如Stefan所建议的:

try
{
    data_init data = new data_init("C:\test.json")
}

catch(Exception e)
{
    Console.WriteLine("Error:");
    Console.WriteLine(e);
}

但是似乎代码在InitializeComponent();处失败

2 个答案:

答案 0 :(得分:0)

您的代码可用于注释以下行吗?

// data_init data = new data_init("C:\test.json")

如果可行,则可能是您的JSON文件很大。是这样吗?

答案 1 :(得分:-1)

如果该行失败,则该行失败。您可以尝试try catch块,但是仍然可以;该行将失败。

一个常见的模式是使用Loaded事件进行进一步的初始化。但是该行仍然会失败。

    public MainWindow()
    {
        InitializeComponent();

        Loaded += async (sender, args) =>
        {   
             //initialization stuff here
        };
     } 

正如我所说,您可能想要尝试像这样的try catch块:

try
{
    data_init data = new data_init("C:\test.json")
}

catch(Exception e)
{
    //the `e` contains information on the error.
}

但是该行仍然会失败。

注意到缺少必需的;

您的代码将始终无法编译。

因此,您可以尝试:

//note some changes
var data = new data_init(@"C:\test.json");

但是它可能会失败。

所以,我希望你会看到;如果没有实施data_init,并且通过发布一些伪代码,我们将无济于事。

如果您想获得更好的答案,请更新您的问题并发布完整的相关代码。

仅通过将坏行放置在其他位置就不能防止其失败。有时,将其放置在错误的位置会导致由于依赖关系而导致失败。但是,在这种情况下,您没有证据表明确实如此。