2017-02-22 49 views
0

У меня есть производный класс, который только добавляет методы базовому классу, и я хотел бы сериализовать его как свой базовый класс, проблема, с которой я сталкиваюсь, заключается в том, что это для игрового мода, и я не могу напрямую изменить базовый класс для добавления XmlInclude в базу.XmlInclude для производного класса без привязки к базовому классу?

namespace CustomNPC 
{ 
public class CustomNPCInteract : NPC 
{ 
public CustomNPCInteract() 
    :base() 
{ 
    this.initializeNPC(); 
} 

public CustomNPCInteract(AnimatedSprite sprite, Vector2 position, string defaultMap, int facingDir, string name, bool dateable, Dictionary<int, int[]> schedule, Texture2D portrait) 
    : base(sprite, position, defaultMap, facingDir, name, dateable, schedule, portrait) 
{ 
    this.initializeNPC(); 
} 

public CustomNPCInteract(AnimatedSprite sprite, Vector2 position, int facingDir, string name, StardewValley.LocalizedContentManager manager = null) 
    :base(sprite, position, facingDir, name, manager) 
{ 
    this.initializeNPC(); 
} 

private void initializeNPC() 
{ 
    this.age = 2; //child 
    this.manners = 2; //rude 
    this.socialAnxiety = 1; //shy 
    this.optimism = 1; //negative 
    this.gender = 1; //female 
    this.datable = false; //not-datable 
    this.homeRegion = 0; //Other 
    this.birthday_Season = "fall"; //fall 8 
    this.birthday_Day = 8; 
    } 
} 
} 

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

Любая помощь будет принята с благодарностью

ответ

0

Это, как вы это делаете ...

 XmlSerializer serializer = new XmlSerializer(typeof(CustomNPCInteract),new XmlRootAttribute("NPC")); 

Это будет переименовать корень сериализованного XML для NPC так, то вы можете использовать стандартный десериализации

+0

Спасибо за комментарий. Фактическая игра, в которой я пишу мод, уже имеет свой собственный экземпляр serializer под SaveGame.serializer, который он использует для сохранения данных. Есть ли возможность добавить к нему вместо того, чтобы перезаписать свой существующий экземпляр? – Kriogenic

+0

Нет. Вам придется переопределить его. XML не поддается добавлению данных, поскольку в любом XML-документе имеется не более одного корневого узла. Это будет простой вопрос, чтобы заменить сериализатор по умолчанию своим, но не знаю больше, я не могу делать никаких дальнейших предложений. – AQuirky