Newtonsoft.Json.JsonSerializationException: невозможно найти конструктор для использования с типом System.Windows.Ink.StC#

Место общения программистов C#
Ответить
Anonymous
 Newtonsoft.Json.JsonSerializationException: невозможно найти конструктор для использования с типом System.Windows.Ink.St

Сообщение Anonymous »

Я пытаюсь сохранить штрихи и дочерние элементы из WPF InkCanvas. Мне удалось сохранить файл, но теперь я не могу его загрузить. Он выдает следующее исключение:
Newtonsoft.Json.JsonSerializationException
HResult=0x80131500
Message=Невозможно найти конструктор для использования с типом System.Windows.Ink.Stroke . Класс должен иметь конструктор по умолчанию, один конструктор с аргументами или конструктор, отмеченный атрибутом JsonConstructor. Путь 'strokes[0].DrawingAttributes', строка 4, позиция 26.
Source=Newtonsoft.Json
Код для сохранения/загрузки классов:
class SaveLoad
{
public static void Save(Board board) {
Microsoft.Win32.SaveFileDialog dlg = new Microsoft.Win32.SaveFileDialog();
dlg.FileName = "Document";
dlg.DefaultExt = ".txt";
dlg.Filter = "Text documents (.txt)|*.txt";
Nullable result = dlg.ShowDialog();
if (result == true)
{
string outpath = dlg.FileName;
string jsonData = JsonConvert.SerializeObject(board, Newtonsoft.Json.Formatting.Indented);
var myFile = File.Create(outpath);
myFile.Close();
File.WriteAllText(@"" + outpath, jsonData);
}
}

public static Board Load()
{
Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog();
dlg.FileName = "Document";
dlg.DefaultExt = ".txt";
dlg.Filter = "Text documents (.txt)|*.txt";
Nullable result = dlg.ShowDialog();
if (result == true)
{
string outpath = dlg.FileName;
string jsonData = File.ReadAllText(outpath);
return JsonConvert.DeserializeObject(jsonData);
}
else { return null; }
}
}

internal class Board
{
public StrokeCollection strokes;
public UIElementCollection elements;
public UIElementCollection elements_serialized = new UIElementCollection(new UIElement(),new FrameworkElement());

public Board(StrokeCollection strokes, UIElementCollection elements) { this.strokes = strokes; this.elements = elements; }

public void Serialize() {
foreach (UIElement element in this.elements) {
elements_serialized.Add(Clone(element));
}
}

public Board getSerialized() {
return new Board(strokes,elements_serialized);
}

public static T Clone(T element)
{
string xaml = XamlWriter.Save(element);
using (StringReader stringReader = new StringReader(xaml))
using (XmlReader xmlReader = XmlReader.Create(stringReader))
return (T)XamlReader.Load(xmlReader);
}
}

Код для сохранения:
Board board = new Board(mainInk.Strokes, mainInk.Children);
board.Serialize();
SaveLoad.Save(board.getSerialized());

Код для загрузки:
Board board = SaveLoad.Load();
if (board == null) {
mainInk.Strokes = board.strokes;
mainInk.Children.Clear();
foreach (UIElement element in board.elements)
{
mainInk.Children.Add(Board.Clone(element));
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... tor-to-use
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»