JSON.. NET行序列化



我在序列化ObservableCollection of Lines (Shape)时遇到了一些麻烦。我正在为Windows RT开发,我正在使用JSON。净v5.02。对于下面的代码,我得到了以下异常:

ObservableCollection<Line> lines;
//some code
string linesString = JsonConvert.SerializeObjectAsync(lines); // problem

类型为Newtonsoft.Json.JsonSerializationException的例外发生在mscorlib.dll中,但未在用户代码中处理

附加信息:从'X1'上获取值出错"Windows.UI.Xaml.Shapes.Line"。

如果有此异常的处理程序,程序可能是安全的继续。

这是一个错误,是否有可能的解决方案?

您的问题是一个跨线程问题。当使用await JsonConvert.SerializeObjectAsync(lines);时,该函数将在另一个线程(不是UI线程)中执行。因为Windows.UI.Xaml.Shapes.Line是一个UI元素,是在UI(主)线程中创建的,你不能在另一个线程中访问对象的属性。解决方案是将其转换为没有这些限制的更简单的对象。

此外,Windows.UI.Xaml.Shapes.Line包含很多信息,可见性,IsEnabled等,我认为您只需要X1, X2, Y1和Y2。所以你可以这样写:

string s = await JsonConvert.SerializeObjectAsync(lines
             .Select(l => new 
                     {
                         l.X1,
                         l.X2,
                         l.Y1,
                         l.Y2
                     }).ToArray()); 

通过这种方式,您可以在UI(主)线程中获得所需的属性。然后将该数组传递给序列化函数。

string s现在包含:

[{"X2"X1":20.0:20.0,"日元":40.0,"日元":40.0},{"X2"X1":20.0:20.0,"日元":40.0,"日元":40.0},{"X2"X1":20.0:20.0,"日元":40.0,"日元":40.0},{"X2"X1":20.0:20.0,"日元":40.0,"日元":40.0}]

我不确定Json是否。Net允许序列化框架类对象。我试过了。

public class CustomLine
{
    public double X1 { get; set; }
    public double X2 { get; set; }
    public double Y1 { get; set; }
    public double Y2 { get; set; }
}

我将Line改为CustomLine行。如果你想使用Line类,然后检索属性X1, X2, Y1, Y2,然后将其分配给CustomLine类属性。

相关内容

  • 没有找到相关文章

最新更新