如何使 C++/CLI ref class 成为 WCF 的数据成员?

How to make a C++/CLI ref class to data member of WCF?

我正在尝试将我的 C# 应用程序转换为 WCF 服务。

在 c# 应用程序中,有一些 c++/CLI class。

我需要通过 WCF 将 class 作为 return 值发送给客户端。

我可以使用 [DataContract] for c++/CLI ref class吗?

这是示例代码

// This is C++/CLI Class
using namespace System;
using namespace System::Runtime::InteropServices;

namespace CLIClass
{   
    class TestClass
    {
    public:
        int index;
        int test;
    };
}

.

//This is WCF service code.
[ServiceContract]
public interface IService1
{
    [OperationContract]
    TestClass GetData(int index);   // I need to return "TestClass"
}

//    
[DataContract]
/* How can I make a Data Contract? */

您可以像添加任何其他属性一样添加 [DataContract] 属性。

在您的情况下,问题来自于您没有声明 ref class(托管 class),而是声明 class(原生 class ).只需使用 ref class,您就可以编写:

namespace CLIClass
{  
    [System::Runtime::Serialization::DataContract]
    ref class TestClass
    {
    public:
        [System::Runtime::Serialization::DataMember] property int index;
        [System::Runtime::Serialization::DataMember] property int test;
    };
}

(并避免在头文件中使用 using namespace

您需要添加对 System.Runtime.Serialization 程序集的引用,您可以通过项目属性或添加以下行来完成:

#using <System.Runtime.Serialization.dll>