1
我試圖實現一個IXmlSerializable
類需要初始化,但由於序列化使用默認的構造函數,所以無法完成初始化。任何提示如何完成?初始化一個可序列化的對象[.NET]
下面是一個示例類。它有一個數組,當它反序列化時,它必須複製/解碼只有從XML文件中固定數量的字節。需要初始化來告訴它固定號碼是什麼。
public class XmlByteArray : IXmlSerializable
{
public Byte[] Values;
// serialization will use this constructor so Values won't be instantiated
public XmlByteArray()
{
}
// Values array needs to be instantiated
public XmlByteArray(int size)
{
Values = new Byte[size];
}
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
var str = reader.ReadString();
reader.ReadEndElement();
// decode str into a Byte array
Byte[] v = Enumerable.Range(0, str.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(str.Substring(x, 2), 16))
.ToArray();
Array.Copy(v, Values, Values.Length);
}
public void WriteXml(XmlWriter writer)
{
var str = BitConverter.ToString(Values).Replace("-", "");
writer.WriteString(str);
}
}
如果這是C++我想通過使XmlByteArray
一個模板,需要一個int
類型,而不是在C#允許解決這個問題。
要添加更多的細節,在意見中的要求,我想要做的是使用的XmlByteArray
對象在另一個類和閱讀這樣
<SomeClass>
<memberA>blah blah</memberA>
<memberB>0A0B0C0D</memberB>
<memberC>0A0B0D</memberC>
</SomeClass>
文件序列化類是
public class SomeClass
{
public SomeClass()
{ }
public string memberA = "";
public XmlByteArray memberB = new XmlByteArray(2);
public XmlByteArray memberC = new XmlByteArray(3);
}
反序列化後memberB.Values
應該有{0x0A, 0x0B}
而不是{0x0A, 0x0B, 0x0C, 0x0D}
。序列化文件意味着需要手動編輯,因此反序列化的數據可能與程序如何序列化它們不一致。
PS。在一個側面說明我不得不添加一個ReadEndElement()
致電ReadXml()
獲得閱讀權利,雖然這MSDN example沒有它。不知道爲什麼它需要。
http://stackoverflow.com/questions/1266547/how-do-you-find-out-when-youve-been-loaded-via-xml-serialization –
解串器應該知道有多少個字節來讀?它不會是第一個序列化的字節數? –
@DStanley如果XML序列化程序會調用某種工廠來創建對象,工廠可以爲該類中的該參數提供一些值。 –