c# WCF REST服务将接收到的类型解释为基类

本文关键字:类型 解释 基类 REST WCF 服务 | 更新日期: 2023-09-27 18:17:49

我有一个c# WCF REST服务正在运行,它工作得很好。但是,在某些时候,我正在执行一个PUT请求来更新一个类。我发送给WCF服务的(修剪)JSON:

{
    "admin": {
        "EntityName": "TestAdmin_xCCg_edited",
        "EntityParent": {
            "TenantBankAccountNr": "1234567",
            "TenantCity": "Amsterdam",
            "TenantCountry": "Holland",
            "TenantGroup": null,
            "TenantNr": "1P",
            "TenantPrefix": "MB",
            "TenantStreet": "DeStraatStraat",
            "TenantStreetNr": "38",
            "TenantVatNr": "1234",
            "TenantZipcode": "1442",
            "AdSynced": false,
            "CreatedByUser": null,
            "CreationDate": "0001-01-01T00:00:00+01:00",
            "EntityName": "Partner_NXfL",
            "EntityParent": {
                "AdSynced": false,
                "CreatedByUser": "Unknown",
                "CreationDate": "2013-02-13T15:59:28+01:00",
                "EntityName": "Veliq",
                "EntityParent": null,
                "EntityType": 2,
                "EntityUID": "172de253-b71d-44ef-ae52-94c21ca957ba",
                "GroupMemberships": null,
                "LazyProperties": [
                    "EntityParent",
                    "GroupMemberships"
                ],
                "MappedIdentifier": null,
                "MappedSystem": null,
                "ModificationDate": "2013-02-13T15:59:28+01:00",
                "ModifiedByUser": "Unknown"
            },
            "EntityType": 2,
            "EntityUID": "2a15f1ea-fefb-408f-9c88-abcb392ad9c3",
            "GroupMemberships": null,
            "LazyProperties": [
                "EntityParent",
                "GroupMemberships",
                "TenantGroup"
            ],
            "MappedIdentifier": null,
            "MappedSystem": null,
            "ModificationDate": "0001-01-01T00:00:00+01:00",
            "ModifiedByUser": null
        },
        "EntityType": 6,
        "EntityUID": "70bc26fc-f50d-4e11-8b04-983b1c5978c0",
    }
}

基本对象("admin"对象,类型为WSAdmin)可以正常发送,但问题是entitypparent字段没有。它是wpartner类型(扩展WSTenant,扩展WSEntity),但是服务器接收的数据是WSEntity类型。这意味着它截断了很多不应该截断的数据。我该如何解决这个问题?手动添加"__type":"wpartner:#MOBIWS"标志不起作用,它会抛出关于ServiceKnownType等的异常。我已经添加了所有这些类型,它们都可以工作。

我也看到了一个关于空白给出错误的问题,但这对我来说不是问题(我发送的是未美化的JSON)。任何帮助将非常感激!

c# WCF REST服务将接收到的类型解释为基类

听起来您需要使用ServiceKnownType属性告诉WCF您的类型。我建议通过编程方式(必要时使用反射)来实现这一点,而不是在属性中硬编码类型。这个问题解释了如何:

如何以编程方式配置WCF已知类型?