不串行化的我在哪裏飾以[DataContract]
屬性和相應的屬性[DataMember]
上屬性的類不連載嵌套[DataContract]
類的問題。嵌套[DataContract]通過WCF
這是我想要連載類:
[DataContract(Namespace = "http://foo.bar.com.au")]
[KnownType(typeof(Point))]
[KnownType(typeof(Site))]
public sealed class Alarm : IExtensibleDataObject
{
[DataMember]
public Point SourcePoint { get; set; }
[DataMember]
public Site SourceSite { get; set; }
[DataMember]
public DateTime ActiveTime { get; set; }
[DataMember]
public int Priority { get; set; }
[DataMember]
public bool IsAcknowledged { get; set; }
[DataMember]
public string Response { get; set; }
private ExtensionDataObject _ExtensionData;
public ExtensionDataObject ExtensionData
{
get { return _ExtensionData; }
set { _ExtensionData = value; }
}
}
這是正在通過WCF服務發送被託管在.NET 4.0 IIS站點。
我的問題是,由於某些原因,SourcePoint
和SourceSite
屬性沒有被序列化。他們只是返回null。奇怪的是,ExtensionData包含這兩個類的所有字段。
另一個奇怪的是,當我在dev web服務器上本地運行IIS主機時,它們被正確地序列化。兩次測試之間唯一的變化是測試客戶端中的端點指向不同的IIS主機。
任何人有任何想法這裏發生了什麼?
編輯:增加了站點&點段
[DataContract(Namespace = "http://foo.bar.com.au")]
public sealed class Site : BaseObject
{
//~Site Details
[DataMember]
public string GisAssetId { get; set; }
[DataMember]
public string Catchment { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public string Location { get; set; }
[DataMember]
public string MelwaysReference { get; set; }
[DataMember]
public double Latitude { get; set; }
[DataMember]
public double Longitude { get; set; }
...
}
和點類。
[DataContract(Namespace = "http://foo.bar.com.au")]
public class Point : BaseObject
{
[DataMember]
public string Tag { get; set; }
[DataMember]
public string Description { get; set; }
[DataMember]
public object CurrentValue { get; set; }
[DataMember]
public string CurrentValueFormatted { get; set; }
[DataMember]
public bool IsDigital { get; set; }
[DataMember]
public DateTime LastUpdated { get; set; }
[DataMember]
public string Source { get; set; }
[DataMember]
public bool InService { get; set; }
[DataMember]
public bool IsAlarmEnabled { get; set; }
[DataMember]
public double TrendMinimum { get; set; }
[DataMember]
public double TrendMaximum { get; set; }
}
應當指出的是,BaseObject是具有相同DataContract簽名,其餘的基類。
Site和Point的外觀如何?如果我不得不盲目猜測:生產服務器是否運行相同版本的.NET?未在合同中修飾的類型的行爲在其中一個服務包中發生更改 – 2011-02-14 23:06:20