Я изучал, как сериализовать класс C# в XML-файл, но нашел только основные примеры. Я пытаюсь сериализовать класс, у которого есть другие классы, инкапсулированные внутри него.Сериализация XML на сложном объекте
Более конкретно, у меня есть класс детерминированных конечных автоматов, в который я инкапсулировал список переходов, тотальных состояний и алфавита. Где переходы и государства также определены классы C#.
После попытки сериализации класса как есть, выходной XML-файл пуст, поэтому я предполагаю, что для моей работы с инкапсулированными классами требуется некоторая дополнительная работа. Что мне нужно, чтобы все инкапсулированные пользовательские классы были помещены в XML.
Вот класс, который я пытаюсь сериализовать. Сейчас мои атрибуты не инициализируются.
public class XMLDoc
{
public XMLDoc()
{
AllStates = new List<State>();
alphabet = new List<char>();
transitions = new List<Transition>();
alphabet.Add('1');
alphabet.Add('0');
}
List<State> AllStates; // Our set of all States
List<Char> alphabet; // Our alphabet set
List<Transition> transitions; //; Our set of transitions
State startState, finalState;
}
Вот государственный класс
public class State
{
public State(int value)
{
id = value;
type = StateType.Normal;
}
public void makeInitial()
{
type = StateType.Initial;
}
public void makeFinal()
{
type = StateType.Final;
}
public int getID()
{
return this.id;
}
int id;
StateType type;
List<Transition> transitions; // This list is going to be all transitions that have this State as the Initial value
}
А вот переходный класс
public class Transition
{
public Transition(State initial, Char accept, State final)
{
this.init = initial;
this.acceptor = accept;
this.final = final;
}
public int getInit(){
return init.getID();
}
public int getFinal()
{
return final.getID();
}
public Char getAcceptor()
{
return acceptor;
}
State init; // This is the state we are transitioning
Char acceptor; // This is the accepting alphabet value
State final; // This is the state init becomes after accepting the acceptor
}
В конце концов, я хочу XML в форме, аналогичной этой
<?xml version='1.0' ?>
<!-- XML Definition of a DFA by Matt Hintzke -->
<DFA>
<!-- This defines the all used states in the DFA -->
<STATES-SET>
<STATE>q0</STATE>
<STATE>q1</STATE>
<STATE>q2</STATE>
<STATE>q3</STATE>
</STATES-SET>
<!-- This defines the alphabet -->
<ALPHABET>
<CHARACTER>1</CHARACTER>
<CHARACTER>0</CHARACTER>
</ALPHABET>
<!-- This defines all transitions -->
<TRANSITION-SET>
<!-- A transition block represents all transitions that can be made from a single initial state -->
<TRANSITION-BLOCK>
<!-- Hence, this block defines all transitions from the INIT-STATE q0 to any other states -->
<INIT-STATE>q0</INIT-STATE>
<!-- A transition represents any ACCEPTOR character from the INIT-STATE to some FINAL state -->
<TRANSITION>
<ACCEPTOR>1</ACCEPTOR>
<FINAL>q1</FINAL>
</TRANSITION>
<TRANSITION>
<ACCEPTOR>0</ACCEPTOR>
<FINAL>q2</FINAL>
</TRANSITION>
</TRANSITION-BLOCK>
<TRANSITION-BLOCK>
<INIT-STATE>q1</INIT-STATE>
<TRANSITION>
<ACCEPTOR>1</ACCEPTOR>
<FINAL>q0</FINAL>
</TRANSITION>
<TRANSITION>
<ACCEPTOR>0</ACCEPTOR>
<FINAL>q3</FINAL>
</TRANSITION>
</TRANSITION-BLOCK>
<TRANSITION-BLOCK>
<INIT-STATE>q2</INIT-STATE>
<TRANSITION>
<ACCEPTOR>1</ACCEPTOR>
<FINAL>q3</FINAL>
</TRANSITION>
<TRANSITION>
<ACCEPTOR>0</ACCEPTOR>
<FINAL>q0</FINAL>
</TRANSITION>
</TRANSITION-BLOCK>
<TRANSITION-BLOCK>
<INIT-STATE>q3</INIT-STATE>
<TRANSITION>
<ACCEPTOR>1</ACCEPTOR>
<FINAL>q2</FINAL>
</TRANSITION>
<TRANSITION>
<ACCEPTOR>0</ACCEPTOR>
<FINAL>q1</FINAL>
</TRANSITION>
</TRANSITION-BLOCK>
</TRANSITION-SET>
<!-- This defines all starting states -->
<STARTING-SET>
<STATE>q0</STATE>
</STARTING-SET>
<!-- This defines all final states -->
<FINAL-SET>
<STATE>q3</STATE>
</FINAL-SET>
</DFA>
И, наконец, вот ко de to serialize ...
public void Serialize()
{
XMLDoc mydoc = new XMLDoc();
XmlSerializer ser = new XmlSerializer(typeof(XMLDoc));
StreamWriter writer = new StreamWriter("test.xml");
ser.Serialize(writer, mydoc);
writer.Close();
}
Пожалуйста, продемонстрируйте код, который вы используете. –
Что вы думаете? – hyru
Вы пытаетесь XML-сериализовать объект. Если вы хотите, чтобы мы вам помогли, вам нужно будет показать фактический код, который выполняет сериализацию. –