我有这个JSON对象(FabricJS),我想在POST请求中使用JSON.NET反序列化:
"{\"objects\":[{\"type\":\"OpenLayout\",\"originX\":\"left\",\"originY\":\"top\",\"left\":300,\"top\":203,\"width\":200,\"height\":100,\"fill\":\"#f05a30\",\"stroke\":null,\"strokeWidth\":1,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeLineJoin\":\"miter\",\"strokeMiterLimit\":10,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"clipTo\":null,\"backgroundColor\":\"\",\"rx\":0,\"ry\":0,\"x\":0,\"y\":0,\"label\":\"btn1\"},{\"type\":\"OpenLayout\",\"originX\":\"left\",\"originY\":\"top\",\"left\":13,\"top\":335,\"width\":200,\"height\":100,\"fill\":\"#f05a30\",\"stroke\":null,\"strokeWidth\":1,\"strokeDashArray\":null,\"strokeLineCap\":\"butt\",\"strokeLineJoin\":\"miter\",\"strokeMiterLimit\":10,\"scaleX\":1,\"scaleY\":1,\"angle\":0,\"flipX\":false,\"flipY\":false,\"opacity\":1,\"shadow\":null,\"visible\":true,\"clipTo\":null,\"backgroundColor\":\"\",\"rx\":0,\"ry\":0,\"x\":0,\"y\":0,\"label\":\"\"}],\"background\":\"\"}"
这是表示结构的类:
public partial class ControlPageResponse
{
[JsonProperty("objects")]
public CanvasBtns[] Btns { get; set; }
[JsonProperty("background")]
public string Background { get; set; }
}
public class CanvasBtns
{
[JsonProperty("type")]
public string Type { get; set; }
[JsonProperty("originX")]
public string OriginX { get; set; }
[JsonProperty("originY")]
public string OriginY { get; set; }
[JsonProperty("left")]
public int Left { get; set; }
[JsonProperty("top")]
public int Top { get; set; }
[JsonProperty("width")]
public int Width { get; set; }
[JsonProperty("height")]
public int Height { get; set; }
[JsonProperty("fill")]
public string Fill { get; set; }
[JsonProperty("stroke")]
public object Stroke { get; set; }
[JsonProperty("strokeWidth")]
public int StrokeWidth { get; set; }
[JsonProperty("strokeDashArray")]
public object StrokeDashArray { get; set; }
[JsonProperty("strokeLineCap")]
public string StrokeLineCap { get; set; }
[JsonProperty("strokeLineJoin")]
public string StrokeLineJoin { get; set; }
[JsonProperty("strokeMiterLimit")]
public int StrokeMiterLimit { get; set; }
[JsonProperty("scaleX")]
public int ScaleX { get; set; }
[JsonProperty("scaleY")]
public int ScaleY { get; set; }
[JsonProperty("angle")]
public int Angle { get; set; }
[JsonProperty("flipX")]
public bool FlipX { get; set; }
[JsonProperty("flipY")]
public bool FlipY { get; set; }
[JsonProperty("opacity")]
public int Opacity { get; set; }
[JsonProperty("shadow")]
public object Shadow { get; set; }
[JsonProperty("visible")]
public bool Visible { get; set; }
[JsonProperty("clipTo")]
public object ClipTo { get; set; }
[JsonProperty("backgroundColor")]
public string BackgroundColor { get; set; }
[JsonProperty("rx")]
public int Rx { get; set; }
[JsonProperty("ry")]
public int Ry { get; set; }
[JsonProperty("x")]
public int X { get; set; }
[JsonProperty("y")]
public int Y { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
}
}
当我尝试反序列化时,我得到“Newtonsoft.Json.dll [...]出现类型'Newtonsoft.Json.JsonSerializationException'的第一次机会异常[...]错误转换值[...]'ControlPageDesigner。 General.ControlPageResponse'.Path'“。我似乎无法找到问题。
ControlPageResponse controlPageRecord = JsonConvert.DeserializeObject<ControlPageResponse>(ControlPage);
答案 0 :(得分:0)
我不确定我的后续猜测,因为我没有在ASP.NET中使用fabricjs 但是如果使用javascript序列化fabric.canvas对象,它与其他javascript对象不同,因为在框架中 toJSON-Method被覆盖。 如果调用toJSON,则fabirc.canvas对象仅返回表示其内容的对象。序列化此返回的对象后,您将获得画布内容的json表示。不是画布对象本身。 对于反序列化,您必须使用特殊方法( loadFromJSON )。
我认为使用ASP.NET的行为是一样的。
答案 1 :(得分:0)
我遇到了一个非常类似的问题,发现我需要在我的JSON对象中声明一个空构造函数。否则,反序列化器将尝试使用我的其他构造函数并给出上述错误。