好吧,您可以将矩阵结构的所有字段标记为不可序列化,并引入“行”结构来序列化和反序列化您的行,如下所示:
[Serializable]
public struct sMatrixRow
{
public sMatrixRow(float col1, float col2, float col3, float col4)
{
this.col1 = col1;
this.col2 = col2;
this.col3 = col3;
this.col4 = col4;
}
public float col1;
public float col2;
public float col3;
public float col4;
}
[Serializable]
public struct sMatrix
{
[XmlElement("row1")]
public sMatrixRow Row1
{
get
{
return new sMatrixRow(m00, m01, m02, m03);
}
set
{
this.m00 = value.col1;
this.m01 = value.col2;
this.m02 = value.col3;
this.m03 = value.col4;
}
}
// And so on, for Rows 2 through 4
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m00;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m01;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m02;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m03;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m10;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m11;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m12;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m13;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m20;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m21;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m22;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m23;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m30;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m31;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m32;
[System.NonSerialized, System.Xml.Serialization.XmlIgnore]
public float m33;
}
更新:此方案成功序列化和反序列化包含类中的以下“矩阵”字段:
<matrix>
<row1>
<col1>2</col1>
<col2>0</col2>
<col3>0</col3>
<col4>0</col4>
</row1>
<row2>
<col1>0</col1>
<col2>2</col2>
<col3>0</col3>
<col4>0</col4>
</row2>
<row3>
<col1>0</col1>
<col2>0</col2>
<col3>2</col3>
<col4>0</col4>
</row3>
<row4>
<col1>0</col1>
<col2>0</col2>
<col3>0</col3>
<col4>1</col4>
</row4>
</matrix>
这是你想要的吗?
更新:将 [XmlElement("row1")] 添加到 Row1 (对于其他行也类似)以小写行名称。我在这里所做的基本上是使用可序列化的属性来创建与底层字段不同但同构的数据的 XML 可见表示。