Сериализация не работает с несколькими проектами - PullRequest
0 голосов
/ 22 августа 2011

Я создаю игру для Windows Phone с платформой XNA. Я хочу сохранить свои уровни в XML-файле, поэтому я подумал, что буду использовать xmlserialization и десериализацию. Сначала я создал тестовый проект, чтобы посмотреть, сработает ли он, и там нет проблем.

Теперь я создал редактор уровней, и это приложение для форм Windows, которое я использую для создания уровней, а не для их сериализации и десериализации в другом проекте (Windows Phone). Чтобы объекты оставались неизменными, я сослался на приложение Windows Phone в приложении Windows Form. Я использовал те же ссылки для сериализации.

с использованием System.Xml.Serialization;

Но когда я пытаюсь сериализовать объект, я получаю исключение: Произошла ошибка, отражающая тип.

Итак, мой вопрос: почему я не могу сериализовать объекты из другого проекта? Или это просто невозможно?

public static void SaveLevel(Level level)
{
   FileStream fs = new FileStream(@"c:\level1.xml", FileMode.Create);

   MemoryStream ms = new MemoryStream();
   Serialize(ms, level);

   fs.Write(ms.ToArray(), 0, (int)ms.Length);

   ms.Close();
   fs.Close();

   ms.Dispose();
   fs.Dispose();
}

public static void Serialize(Stream streamObject, object objectForSerialization)
{
   if (objectForSerialization == null || streamObject == null)
        return;

   XmlSerializer serializer = new XmlSerializer(objectForSerialization.GetType()); //error occurs
   serializer.Serialize(streamObject, objectForSerialization);
}

Объект, который нужно сериализовать.

public class Level
{
    [XmlElement]
    public string Name { get; set; }

    public Level()
    {
    }
}

Как только я скопировал файл в проект levelEditor, он будет сериализован и десериализован. Но я на самом деле не хочу копировать эти файлы, потому что если я изменяю файл в одном проекте, мне также нужно изменить его в другом проекте, что не очень удобно.

1 Ответ

0 голосов
/ 26 августа 2011

Насколько я знал, для сериализации пользовательского типа необходимо дать классу атрибут [Serializable].вот так.

[Serializable]
public class Level
{

    //......
}

посмотрим, решит ли это это.

...