首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF DataContract上传

WCF DataContract上传
EN

Stack Overflow用户
提问于 2009-06-21 20:52:04
回答 4查看 1.2K关注 0票数 1

我正在尝试获取我在服务器上收到的一个datacontract对象,对它进行一些操作,然后返回它的一个向上转换的版本,但它似乎不起作用。我可以通过使用KnownType或ServiceKnownType属性让它工作,但我不想往返所有的数据。下面是一个示例:

代码语言:javascript
复制
[DataContract]
public class MyBaseObject
{
    [DataMember]
    public int Id { get; set; }
}

[DataContract]
public class MyDerivedObject : MyBaseObject
{
    [DataMember]
    public string Name { get; set; }
}


[ServiceContract(Namespace = "http://My.Web.Service")]
public interface IServiceProvider
{
    [OperationContract]
    List<MyBaseObject> SaveMyObjects(List<MyDerivedObject> myDerivedObjects);
}

public class ServiceProvider : IServiceProvider
{
    public List<MyBaseObject> SaveMyObjects(List<MyDerivedObject> myDerivedObjects)
    {
        ... do some work ...

        myDerivedObjects[0].Id = 123;
        myDerivedObjects[1].Id = 456;
        myDerivedObjects[2].Id = 789;

        ... do some work ...

        return myDerivedObjects.Cast<MyBaseObject>().ToList();
    }
}

有人知道如何在不重新创建新对象或使用KnownType属性的情况下让它工作吗?

EN

回答 4

Stack Overflow用户

发布于 2009-06-21 21:28:39

我认为你的问题是你试图发送一个通用的列表。

如果您将列表封装在一个对象中,它将会起作用。也就是说,创建一个具有单个公共属性的对象,该属性是泛型列表。

您还需要确保将协定中未直接使用的所有类标记为可序列化。

票数 0
EN

Stack Overflow用户

发布于 2009-06-22 06:30:09

如果你想返回派生的对象,那么总是会有一个往返过程,因为客户端和服务是分开的。为了让客户机更新它自己的MyBaseObjects列表,它必须反序列化来自服务器的MyDerivedObjects列表。

需要使用WSDL和/或ServiceKnownType,因为这会导致将该类型信息添加到WSDL中,而客户端将使用该信息将消息反序列化为正确的类型。

对于初学者,一个用于测试您描述的场景的有用工具:http://www.wcfstorm.com

票数 0
EN

Stack Overflow用户

发布于 2009-11-08 14:55:34

您可以尝试创建一个DataContractSurrogate (IDataContractSurrogate)并为GetDataContractType调用返回您的基类型。我真的不确定这是如何使用它的,所以你可能仍然会更好地使用“额外的工作”,但也许我不理解额外工作的范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1024723

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档