不串行化的我在哪里饰以[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