【问题标题】:Have properties of base class serialize when serializing derived class序列化派生类时序列化基类的属性
【发布时间】:2011-09-07 23:27:34
【问题描述】:

我有一个带有一些属性的基类:

    // must include any derived classes here as known types or else they will throw errors on serialization
[KnownType(typeof(CollaborationEventMeasureDistance))]
[DataContract]
public partial class CollaborationEvent
{
    public bool HasBeenTransported { get; set; }
    public Guid MessageBoxGuid { get; set; } 

    public CollaborationEvent()
    {
        HasBeenTransported = false;
    }

}

还有一个具有自己的一些属性的派生类:

    public class CollaborationEventMeasureDistance : CollaborationEvent
{
    public Geometry Geometry { get; set; }
}

当我序列化派生类时,它的所有属性都被序列化了,但是它从基类继承的属性却没有:

<CollaborationEvent i:type="CollaborationEventMeasureDistance">
  <Geometry xmlns:d4p1="http://schemas.datacontract.org/2004/07/ESRI.ArcGIS.Client.Geometry"
  i:type="d4p1:Polyline">
    <d4p1:spatialReference>
      <d4p1:wkid>26910</d4p1:wkid>
    </d4p1:spatialReference>
    <d4p1:paths>
      <d4p1:points>
        <d4p1:point>
          <d4p1:spatialReference>
            <d4p1:wkid>26910</d4p1:wkid>
          </d4p1:spatialReference>
          <d4p1:x>460892.23924271885</d4p1:x>
          <d4p1:y>5367682.5572773879</d4p1:y>
        </d4p1:point>
        <d4p1:point>
          <d4p1:spatialReference i:nil="true" />
          <d4p1:x>461001.35841108358</d4p1:x>
          <d4p1:y>5367648.5755294543</d4p1:y>
        </d4p1:point>
      </d4p1:points>
    </d4p1:paths>
  </Geometry>
</CollaborationEvent>

谁能指出我做错了什么?

我希望我的 XML 看起来更像:

    <CollaborationEvent i:type="CollaborationEventMeasureDistance">
  <HasBeenTransported>True</HasBeenTransported>
  <MessageBoxGuid>blah</MessageBoxGuid>
  <Geometry xmlns:d4p1="http://schemas.datacontract.org/2004/07/ESRI.ArcGIS.Client.Geometry"
  i:type="d4p1:Polyline">
    <d4p1:spatialReference>
      <d4p1:wkid>26910</d4p1:wkid>
    </d4p1:spatialReference>
    <d4p1:paths>
      <d4p1:points>
        <d4p1:point>
          <d4p1:spatialReference>
            <d4p1:wkid>26910</d4p1:wkid>
          </d4p1:spatialReference>
          <d4p1:x>460892.23924271885</d4p1:x>
          <d4p1:y>5367682.5572773879</d4p1:y>
        </d4p1:point>
        <d4p1:point>
          <d4p1:spatialReference i:nil="true" />
          <d4p1:x>461001.35841108358</d4p1:x>
          <d4p1:y>5367648.5755294543</d4p1:y>
        </d4p1:point>
      </d4p1:points>
    </d4p1:paths>
  </Geometry>
</CollaborationEvent>

谢谢

【问题讨论】:

  • 是在序列化的时候设置的吗?
  • 我们可以看看你的序列化代码吗?

标签: c# xml silverlight serialization


【解决方案1】:

假设您的 Geometry 类是可序列化的,请尝试以下操作:

[DataContract, Serializable]
public class CollaborationEventMeasureDistance : CollaborationEvent  
{  
    [DataMember]
    public Geometry Geometry { get; set; }  
} 

[KnownType(typeof(CollaborationEventMeasureDistance))] 
[DataContract, Serializable]
public partial class CollaborationEvent 
{ 
    [DataMember]
    public bool HasBeenTransported { get; set; } 
    [DataMember]
    public Guid MessageBoxGuid { get; set; }  

    public CollaborationEvent() 
    { 
        HasBeenTransported = false; 
    } 

} 

【讨论】:

  • 谢谢泰勒。我认为我不需要属性上的任何“语法糖”,因为没有它派生类的属性正在序列化。但是 [DataMember] 属性确实清除了它。干杯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多