Jag har en klass som förenklat ser ut som följer: Det är ju inte så konstigt, eftersom du här (i <Text>) packar in Att det inte går göra så här förstår jag mycket väl. Jag undrar hur jag ska lösa det. Vad menar du med att göra den till XmlElement? Jag menar helt enkelt att variabeln skall vara av typ XmlElement som serialiserar sig till XML. Om du önskar lagra XML i variabeln. Alternativt får du ta och encode:a strängen så att < blir < osv. Lägga till radbyten i XML-text vid serialization
class Test
{
[DefaultValue("")]
public string Text
{
get { return m_text; }
set { m_text = value; }
}
private string m_text;
[XmlAttribute]
[DefaultValue(8F)]
public float FontSize
{
get { return m_fontSize; }
set { m_fontSize = value; }
}
private float m_fontSize;
}
Om jag serializera detta får jag resultatet:
<Test FontSize="9">
<Text>Hello world</Text>
</Test>
Men jag vill ha möjlighet att lägga till radbyten i texten så att m_text får värden "Hello\nworld". Tänker mig att göra så här:
<Test FontSize="9">
<Text>Hello<br/>world</Text>
</Test>
Om jag försöker deserializera detta fungerar det inte, så jag undrar hur jag ska bära mig åt?
Sv: Lägga till radbyten i XML-text vid serialization
- en textnod,
- en ny nod <br> utan någon text,
- följt av en textnod till.
Alltså, det tolkas som en XML-struktur, när det förväntas en enkel Text-nod med bara text (en string).
Om du ska stoppa in custom XML (eller xhtml) i fältet ska du göra om String-variabeln till XmlElement.
Men du bör inte behandla <br/> som data, det är ju markup som säger att webbläsaren skall göra radbryt. Du bör lagra CRLF i stället.Sv:Lägga till radbyten i XML-text vid serialization
Som jag gör idag lagrar jag \r\n i XML-filen och det fungerar, men jag tycker det blir så fult. Dessutom vill jag kunna lägga till fler styrelement i texten utöver <br> (men det handlar inte om xhtml, jag bara lånar delar från det)Sv: Lägga till radbyten i XML-text vid serialization