c# - Json.net LinearGradientBrush序列化

标签 c# json.net lineargradientbrush

我尝试用 Json.net 序列化 LinearGradientBrush (System.Windows.Media.LinearGradientBrush) 但没有成功:

var lg = new LinearGradientBrush();
lg.StartPoint = new Point(2,3);
lg.EndPoint = new Point(3.1,0);
lg.GradientStops = new GradientStopCollection(new []{ new GradientStop(Colors.Red, 0),new GradientStop(Colors.White, 1)});

var json = JsonConvert.SerializeObject(lg);

此代码将输出一个包含 "System.Windows.Media.LinearGradientBrush" 的字符串,这显然是错误的。

我尝试使用 xml 序列化,它按预期工作:

var sb = new StringBuilder();
var writer = XmlWriter.Create(sb, new XmlWriterSettings(){ Indent=true});
var ser = new XmlSerializer(lg.GetType(), new []{ typeof(System.Windows.Media.MatrixTransform)});
ser.Serialize(writer,lg);
var xml = sb.ToString();

为什么 json 序列化程序无法序列化 LinearGradientBrush?

最佳答案

Json.NET 库在尝试序列化复杂对象(如 an array)时出现一些问题、LinearGradientBrush 对象或具有高级结构的对象,如字典或类似的东西(对于 LinearGradientBrush,有一个 GradientStopCollection 数据结构可能是导致问题的原因)。

按照 documentation 中的建议,尝试以更可控的方式序列化您的对象。 .

如果这没有帮助,也许可以按照建议为您的对象创建一个自定义转换器 here , 和 use it同时调用方法 SerializeObject() 来序列化您的对象。

关于c# - Json.net LinearGradientBrush序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21089697/

相关文章:

c# - 反序列化使用 TypeNameHandling.All 序列化的字符串

c# - JToken.WriteToAsync 不会写入 JsonWriter

wpf - 将 LinearGradientBrush 而不是纯色设置为 VisualState 中的 storyboard.targetProperty

c# - twoWay 绑定(bind)在以 ObservableCollection 作为源的 ToggleButton 中不起作用

c# - 数据传输对象 - 在 DTO 或业务对象中进行映射?

c# - 使用 C# 5.0 进行并行图像处理

c# - System.Text.Json.Serialization 替换 Netwtonsoft 的 JsonObjectAttribute NamingStrategy 设置

wpf - 如何从 XAML LinearGradientBrush 的偏移中读取颜色?

wpf - SVG -> WPF 线性渐变

c# - 在 C# 中使用后期绑定(bind)获取特定的 Excel 实例