我创建了一个类Point
,它使用UnitsNet nuget包中的Length
类型进行单位转换:
public class Point
{
public Point() { }
[JsonConstructor]
public Point(Length x, Length y, Length z)
{
X = x;
Y = y;
Z = z;
}
public Length X { get; set; }
public Length Y { get; set; }
public Length Z { get; set; }
}
这个类然后被我创建的其他类(如Line
)作为公共属性使用:
public class Line
{
public string Name { get; set; }
public Point StartPoint { get; set; } = new(new Length(), new Length(), new Length());
public Point EndPoint { get; set; } = new(new Length(), new Length(), new Length());
}
当我使用类似下面的XML反序列化Line
对象时,我得到的length值为零:
<?xml version="1.0"?>
<File>
<Name>Sketch2</Name>
<Line>
<Name>Line4</Name>
<Volume>28.30188679245283</Volume>
<StartPoint>
<X>0.71161836352506369</X>
<Y>0.44158426707323123</Y>
<Z>0</Z>
</StartPoint>
<EndPoint>
<X>0.79110301979189424</X>
<Y>0.596011599248788</Y>
<Z>0</Z>
</EndPoint>
</Line>
</File>
现在我想我会遇到这个XML的问题,因为它没有指定双精度值应该是什么单位(米、毫米、厘米等)。
感觉就像我需要为Point
或Length
手动创建一个解串器。但这可能根本不是正确的道路。
我尝试将XML转换为JSON,因为JSON反序列化似乎有更好的控制。JSON反序列化,但我仍然没有得到X,Y和Z的值。我已经烧了大约一天在这一点上,我认为我需要一些方向,以正确的方式做到这一点。
1条答案
按热度按时间w8biq8rn1#
这是一个超级黑客,不优雅的解决方案。我通过(cough,cough)互联网上的各种方法得出了这个结论。
有很多理由讨厌它。首先,它创建的这个
InitializerX
属性是public Length X
的一个有点令人困惑的版本。因为XML不能处理私有字段、属性等。我必须公开。希望有人有更好的解决方案,然后呢???