Десериализация, значение typeof
- Привет!
Я сделал этот код: (visual studio, новый проект, visual c#, приложение wpf)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.IO; using System.Xml.Serialization; namespace lion4 { /// <summary> /// Interaction logic for MainWindow.xaml /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); Book.MyMain(); } } public class Book { public string Name { get; set; } public int ISBN { get; set; } public static void MyMain() { Book book1 = new Book { Name = "Lion4", ISBN = 666 }; //string bookFileName = "lion4.xaml"; XmlSerializer serializer = new XmlSerializer(typeof(Book)); using (TextWriter writer = new StreamWriter(@"Lion4.xml")) { serializer.Serialize(writer, book1); } } } }
который создает xml-файл lion4.xml (сериализовано).
Затем я попытался использовать этот файл, чтобы попробовать десериализацию, как в этом примере (просто откройте файл, без сохранения), sth, как в этом примере:
Как использовать XML-сериализатор и десериализатор в .NET (C#) - YouTube[
Вот мой код:
.цезий :
using System; using System.IO; using System.Windows; using Microsoft.Win32; using System.Xml.Serialization; namespace WpfTutorialSamples.Dialogs { public partial class OpenFileDialogSample : Window { public OpenFileDialogSample() { InitializeComponent(); } private void btnOpenFile_Click(object sender, RoutedEventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); if (openFileDialog.ShowDialog() == true) txtEditor.Text = File.ReadAllText(openFileDialog.FileName); MessageBox.Show("Hello, world!", "My App", MessageBoxButton.YesNo, MessageBoxImage.Information); if (MessageBox.Show("Yes", "No", MessageBoxButton.YesNo) == MessageBoxResult.Yes) { var path = openFileDialog.FileName; XmlSerializer serializer = new XmlSerializer(typeof(Book)); StreamReader reader = new StreamReader(path); var input = serializer.Deserialize(reader); button1.Content = input; } } } }
код в формате. xaml:
<pre lang="HTML"><Window x:Class="WpfTutorialSamples.Dialogs.OpenFileDialogSample" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="OpenFileDialogSample" Height="300" Width="708"> <DockPanel Margin="10" Width="651"> <WrapPanel HorizontalAlignment="Center" DockPanel.Dock="Top" Margin="0,0,0,10"> <Button Name="btnOpenFile" Click="btnOpenFile_Click">Open file</Button> </WrapPanel> <TextBox Name="txtEditor" /> <Button Content="Button" Height="83" Name="button1" Width="592" /> </DockPanel> </Window>
Единственная ошибка-typeot (Book), которая в примере видео-typeof(List<person>). Поскольку файл все еще сериализован и существует, пожалуйста, какое значение ttypeof я должен использовать? БОЛЬШОЕ СПАСИБО!!!
Что я уже пробовал:
XmlSerializer serializer = новый XmlSerializer(typeof(Book));
Sergey Alexandrovich Kryukov
Лучше не используйте устаревший XmlSerializer, который никогда не был достаточно хорош, используйте Data Contract.
—СА
Member 12581582
Здравствуйте, смысл tassk заключается в том, чтобы сделать это с помощью XmlSerializer... :)