首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCF DataContracts与多态性

WCF DataContracts与多态性
EN

Stack Overflow用户
提问于 2011-04-12 21:17:12
回答 2查看 1.1K关注 0票数 1

这是我想做的。这(理论上)应该很简单。

假设我有一个WCF服务,它有以下代码(基本功能):

代码语言:javascript
复制
<DataContract()>
Public Class BaseObj
    <DataMember()>
    Public ID As Integer
End Class


<DataContract()>
Public Class TestObj1
    Inherits BaseObj

    Public Sub New(ByVal idval As Integer)
        ID = idval
    End Sub

End Class


<DataContract()>
Public Class TestObj2
    Inherits BaseObj

    Public Sub New(ByVal idval As Integer)
        ID = idval
    End Sub

    <DataMember()>
    Public DoNotShow As String = "fail"

End Class

下面是我想要写的代码:

代码语言:javascript
复制
<WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json, UriTemplate:="Test?reqReportID={reqReportID}")>
Public Function GetCollection(ByVal reqReportID As Integer) As List(Of BaseObj)

    Dim myObjs as New List(Of BaseObj)
    myObjs.add(new TestObj1(1))
    myObjs.add(new TestObj2(2))
    return myObjs

End Function

我希望JSON响应看起来像这样:[{"ID":1},{"ID":2}]

现在,我已经返回的代码返回一个空响应(没有抛出错误,也没有传递信息)。我可以通过这样做让它返回一些东西:

代码语言:javascript
复制
<DataContract(), KnownType(GetType(TestObj1)), KnownType(GetType(TestObj2))>
Public Class BaseObj
    <DataMember()>
    Public ID As Integer
End Class

但是,响应向JSON对象添加了一个"__type“,并向JSON对象添加了"DoNotShow”(这不是件好事)。

这里的问题是,我不想传递每个对象唯一的信息。我只需要通过基类对每个对象通用的信息。我什么也做不了,除非我遗漏了一些东西,否则WCF的作者在创建OO编程时似乎对OO编程有了一个非常被动的看法。

如果你对此有任何见解,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2011-04-12 23:13:24

出于好奇,这有什么关系?以你给出的例子,我不确定我是否遵循了为什么它是重要的。

我的一个选择是从TestObj2继承TestObj1。然后,我将去掉已知类型(gettype(Testobj2))。

如果您想动态添加已知类型,那么您应该自己调用datacontractjsonserializer序列化程序。

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.json.datacontractjsonserializer.aspx

编辑:这将在客户端产生两个TestObj1对象。不确定你是否想要那样的行为。

票数 0
EN

Stack Overflow用户

发布于 2011-04-13 04:45:19

如果您的集合只输入到BaseObj,我认为序列化程序不可能生成您正在寻找的JSON。

如果只生成[{"ID":1},{"ID":2}],则收件人无法区分这些类型。另一端如何确定第一个对象的类型是TestObj1,而第二个对象的类型是TestObj2?

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

https://stackoverflow.com/questions/5641750

复制
相关文章

相似问题

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