2014-07-17 63 views
0

我有一個Point類,我想序列化爲屬性。下面是我真正想要的例子:我知道這是否TestClass中使用IXmlSerializable的接口來實現來實現序列化類作爲屬性

<TestClass Points="0.1 0.2"> 

</TestClass> 

public class PointXY 
{ 
    [XmlIgnore] 
    public Double X { get; set; } 

    [XmlIgnore] 
    public Double Y { get; set; } 

    public override string ToString() 
    { 
     return Points; 
    } 
} 

public class TestClass 
{ 
    [XmlAttribute] 
    public PointXY Points { get; set; } 
} 

測試類應序列來。但是我想要PointsXY應該作爲屬性代替元素。可能嗎?如果是的話如何?這也應該被反序列化。

回答

1

我不知道如何將整個類序列化爲屬性。

你會要麼必須實現IXmlSerializable或屬性添加到TestClass和序列化作爲一個屬性:

public class TestClass 
{ 
    [XmlIgnore] 
    public PointXY Points { get; set; } 

    [XmlAttribute("Points")] 
    public string PointString 
    { 
     get 
     { 
      return string.Format("{0} {1}",Points.X, Points.Y); 
     } 
     set 
     { 
      // TODO: Add null checking, validation, etc. 
      string[] parts = value.Split(' '); 
      Points = new PointXY {X = double.Parse(parts[0]), Y = double.Parse(parts[1])}; 
     } 
    } 
} 
0

複雜的對象通常序列化爲XML元素。不幸的是,你不能在複雜類型上設置XmlAttribute,否則你會得到一個運行時異常。如果你絕對必須在這裏使用Xml屬性,你可以創建一個只返回你需要的數據的虛擬屬性。使用該代碼:

public class TestClass 
{ 
    [XmlAttribute(@"Points")] 
    public string PointsString 
    { 
     get { return Points.ToString(); } 
     set { throw new NotSupportedException(); } 
    } 

    [XmlIgnore] 
    public PointXY Points { get; set; } 
}