Сериализация в XML c#

424
20 января 2017, 06:00

Делаю сериализацию по примеру

using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
[Serializable]
public class UserPrefs
{
    public string WindowColor;
    public int FontSize;
}
static class Program
{
    [STAThread]
    static void Main()
    {
        UserPrefs userData = new UserPrefs();
        userData.WindowColor = "Yellow";
        userData.FontSize = 50;           
        BinaryFormatter binFormat = new BinaryFormatter();
        // Сохранить объект в локальном файле.
        using (Stream fStream = new FileStream("user.xml",
           FileMode.Create, FileAccess.Write, FileShare.None))
        {
            binFormat.Serialize(fStream, userData);
        }
    }
}

Файл создается но как xml файл он не открывается пишет не удается отобразить страницу XML. Подскажите в чем ошибка.

Answer 1

То, что вы нашли — это бинарная сериализация, а не сериализация в XML.

Надо так:

UserPrefs userData = new UserPrefs();
userData.WindowColor = "Yellow";
userData.FontSize = 50;
//var xml = JsonConvert.SerializeObject(userData);
XmlSerializer seri = new XmlSerializer(typeof(UserPrefs));
// тут вам скорее всего нужен другой тип stream'с
using (var s = new MemoryStream())
{
    seri.Serialize(s, userData);
    // всё, сериализация окончена
    // перегоним в строку для контроля
    s.Seek(0, SeekOrigin.Begin);
    var text = new StreamReader(s).ReadToEnd();
}

В переменной text будет следующее:

<?xml version="1.0"?>
<UserPrefs xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <WindowColor>Yellow</WindowColor>
  <FontSize>50</FontSize>
</UserPrefs>

Если вам нужно записать в файл, вместо MemoryStream'а берите сразу FileStream и т. д.

using (var s = File.Create(@"user.xml"))
{
    seri.Serialize(s, userData);
}
READ ALSO
Получение загруженности каждого ядра

Получение загруженности каждого ядра

Я смог получить общую загруженность процессора через Open Hardware Monitor Lib вот так:

304
WCF: Как отключить базовую авторизацию

WCF: Как отключить базовую авторизацию

Изучаю базовую авторизацию

425
scrollbar на Windows Forms

scrollbar на Windows Forms

Помогите, пожалуйста, как реализовать scrollbar на winforms c#? Я добавила элемент на форму, но что нужно сделать, чтобы он двигался?

563
Ошибка при запуске приложения в случае автозапуска при старте Windows

Ошибка при запуске приложения в случае автозапуска при старте Windows

Мне нужно иметь два способа запуска моей программы: обычный запуск с отображением формы, и скрытый запуск без отображения формы - при запуске...

493