Сериализация объекта как

#c# #serialization

#c# #сериализация

Вопрос:

как быстро (не так много нужно сделать) сериализовать этот объект?

 Dictionary<int, List<int[,]>>
  

оригинальный XmlSerializer не поддерживает словарь и массив[,]

Ответ №1:

Редактировать:

Поскольку Dictionary не поддерживается XmlSerializer , мой первоначальный ответ неверен, но я предоставляю ссылку на другую сериализацию. Лучший ответ — реализовать свой собственный KeyValuePair класс и преобразовать Dictionary в этот класс, чтобы его можно было сериализовать. Хорошее объяснение того, как реализовать и почему это необходимо, можно найти здесь.


ПРИМЕЧАНИЕ: Это мой старый ответ и неверный.

В этом примере используется встроенный.Класс Net XmlSerializer для сериализации в строку. Сериализатор может выполнять запись в любой поток, так что, например, если вы выполняете сериализацию в файл, вы хотели бы использовать FileWriter вместо StringWriter .

 // serialize into a string
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);

// create a serializer for my specific type
XmlSerializer ser = new XmlSerializer(typeof(Dictionary<int, List<int[,]>>));

// perform serialization
ser.Serialize(sw, myObj);

// retrieve the final serialized result as a string I can work with
string serialized = sb.ToString();

// do something with serialized object
  

Комментарии:

1. Чувак, прости, но оригинальный XmlSerializer не поддерживает словарь и массив[,]

2. @KowalskyJan: Тогда, пожалуйста, упомяните это в своем посте 🙂

Ответ №2:

Если вам конкретно нужна сериализация XML, вам может помочь пользовательский класс. Поскольку вы на самом деле не делаете KeyValuePair , попробуйте что-то вроде этого:

 [XMLSerializable]
public class CustomDictionary
{
    public int Key {get; set;}
    public List<Coordinate> Value {get; set;}
}

[XMLSerializable]
public class Coordinate
{
   public int X;
   public int Y;
}
  

Это предполагает, что стандартная точка (которая, я полагаю, является двойным X, двойным Y) не будет работать, и что вы храните только одно значение в каждом столбце вашего массива int. Конечно, вы могли бы модифицировать этот класс контейнера в соответствии с вашими конкретными потребностями.

Как только вы правильно разметите свой код (нет — я не думаю, что это так), вы просто сможете вызвать stock XmlSerializer для записи в XML.