序列化继续改进

This commit is contained in:
艾竹
2023-01-25 11:11:27 +08:00
parent a5005ac083
commit a01eb8825a
44 changed files with 319 additions and 398 deletions

View File

@@ -25,12 +25,26 @@ namespace AIStudio.Wpf.DiagramDesigner
Offset = viewmodel.Offset;
}
[XmlAttribute]
[XmlIgnore]
public double? Distance
{
get; set;
}
[JsonIgnore]
[XmlAttribute("Distance")]
public string XmlDistance
{
get
{
return SerializeHelper.SerializeDoubleNull(Distance);
}
set
{
Distance = SerializeHelper.DeserializeDoubleNull(value);
}
}
[XmlIgnore]
public Point Offset
{

View File

@@ -1,4 +1,5 @@
using Newtonsoft.Json;
using AIStudio.Wpf.DiagramDesigner.Helpers;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
@@ -489,9 +490,24 @@ namespace AIStudio.Wpf.DiagramDesigner
return new Size(double.Parse(pieces[0]), double.Parse(pieces[1]));
}
public static string SerializeDoubleNull(double? point)
{
return point?.ToString();
}
public static double? DeserializeDoubleNull(string point)
{
double? value = null;
if (Double.TryParse(point, out var result))
{
value = result;
}
return value;
}
public static string SerializeObject(object obj, string serializableType)
{
if (serializableType?.ToLower() == "xml")
if (serializableType?.ToLower() == ".xml")
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
XmlWriterSettings settings = new XmlWriterSettings();
@@ -517,7 +533,24 @@ namespace AIStudio.Wpf.DiagramDesigner
public static SelectableItemBase DeserializeObject(Type type, string serializableString, string serializableType)
{
if (serializableType?.ToLower() == "xml")
if (serializableType?.ToLower() == ".xml")
{
using (StringReader sr = new StringReader(serializableString))
{
XmlSerializer serializer = new XmlSerializer(type);
return serializer.Deserialize(sr) as SelectableItemBase;
}
}
else
{
return JsonConvert.DeserializeObject(serializableString, type) as SelectableItemBase;
}
}
public static SelectableItemBase DeserializeObject(string typename, string serializableString, string serializableType)
{
Type type = TypeHelper.GetType(typename);
if (serializableType?.ToLower() == ".xml")
{
using (StringReader sr = new StringReader(serializableString))
{

View File

@@ -10,13 +10,25 @@ namespace AIStudio.Wpf.DiagramDesigner.Models
public class SerializableItem
{
[XmlIgnore]
public Type Type
public Type ModelType
{
get; set;
}
[XmlAttribute]
public string TypeName
public string ModelTypeName
{
get; set;
}
[XmlIgnore]
public Type SerializableType
{
get; set;
}
[XmlAttribute]
public string SerializableTypeName
{
get; set;
}