如何使 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>
我正在尝试将我的 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>