嵌套[DataContract]的不是通过WCF连载 [英] Nested [DataContract]'s not serialising through WCF

查看:184
本文介绍了嵌套[DataContract]的不是通过WCF连载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在那里的一类装饰着 [DataContract] 属性和适当的 [数据成员] 的问题属性在属性不序列化的嵌套 [DataContract] 类。

I'm having an issue where a class decorated with the [DataContract] attribute and appropriate [DataMember] attributes on properties is not serialising nested [DataContract] classes.

这是该类我想要连载:

[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站点发送。

This is being sent via a WCF service being hosted in an .NET 4.0 IIS site.

我的问题是,由于某种原因,资源点 SourceSite 属性不会被序列化。他们只是返回null。奇怪的是,ExtensionData包含这两个阶级的各个领域。

My issue is that for some reason, the SourcePoint and SourceSite properties are not being serialised. They are just returning null. Oddly, the ExtensionData contains all the fields of those two classes.

另外奇怪的是,当我在开发Web服务器上本地运行IIS的主机,它们是正确的序列化。这两个测试之间的唯一的变化是,在测试客户端的端点指向不同的IIS主机。

The other strange thing, is that when I run the IIS host locally on the dev web server, they are correctly serialised. The only change between the two tests is that the endpoint in the test client is pointing to the different IIS hosts.

任何人有任何的想法是这里发生了什么?

Anyone have any idea's what's happening here?

编辑:增加了站点和放大器;点片段

Added Site & Point snippets

[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; }
    ...
}

和Point类。

[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签名作为其余的基类。

It should be noted that BaseObject is a base class that has the same DataContract signature as the rest.

推荐答案

问题是,Visual Studio的Web安装项目,也被用来部署到服务器上,并没有更新的IIS主机的依赖关系正常。

The issue was that the Visual Studio Web Setup project, that was being used to deploy to the server, wasn't updating the dependencies of the IIS host properly.

这意味着任何对数据的更改合同并没有被复制过,从而导致作为服务器不知道的属性问题,连载他们。

This means that any changes to the data contracts were not being copied across, causing the issues as the server didn't know about the properties to serialise them.

我只好从安装项目中删除的项目输出和重新添加之前,它会拿起依存关系正常。

I had to remove the project output from the setup project and re-add it before it would pick up the dependencies properly.

现在一切又有效!

这篇关于嵌套[DataContract]的不是通过WCF连载的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆