我在尝试获取某个类的属性值时遇到了一些麻烦。实施结构如下:将system._comobject转换为.net字符串
- C#编写的一个COM对象具有COM可见包装类,使得与标记有ComVisible特性(假)属性使用两类。
- 从传统的ASP页面调用COM对象来执行一些工作。
非COM可见类有一些.NET类型的属性(主要是字符串类型)。问题是当在类中的各种方法中访问这些属性时,属性返回System._ComObject作为它们的值而不是它们的实际内容。我已经尝试使用ToString(),明确地将它们转换为它们的.NET类型,并且在获取属性的类型后也使用InvokeMember()。但是,当使用InvokeMember时,似乎没有给出属性的实际内容值,这给出了某些属性的实际内容。我得到的是System._ComObject。
所以我的问题是我如何获得这些属性的实际值,而不是只获取System._ComObject?
更新1:
的代码示例我在做什么:
[ComVisible(false)]
public class Node
{
public int Id
{
get;
set;
}
public string Name
{
get;
set;
}
public string DataType
{
get;
set;
}
}
[ComVisible(false)]
public class Builder
{
public Node Root;
ASPTypeLibrary.Response response;
public void SetUpProperties(object resp, string name, string dataType){
response = (ASPTypeLibrary.Response)resp;
Root = new Node();
Root.Name = name;
Root.DataType = dataType;
response.Write(Root.Name.ToString()); // This works fine
response.Write(Root.DataType.ToString()); // This works fine
PrintNode();
}
public void PrintNode()
{
response.Write(Root.Name.ToString()); // This works fine. Prints actual content.
response.Write(Root.DataType.ToString()); // This prints System._ComObject
}
}
[ComVisible(true)]
public class Wrapper
{
/* Required constructors are definded */
public void Start(object resp)
{
Builder bld = new Builder();
bld.SetUpProperties(resp, "Node 1", "Type 1");
}
}
生成器类实例化和setProperties方法()是从一个在传统的ASP创建的包装类称为页面使用Server.CreateObject()。 System._ComObject打印在PrintNode()中。我不确定除了ToString()之外还有什么其他方法可以用来获取属性的内容。
感谢,
请添加一些代码来说明您所描述的内容(从描述中不难理解您正在做什么,或者您在哪里看到System._ComObject实例)。 .NET类的字符串值属性总是返回String实例。你的代码中还有其他一些东西正在发生。 – 2012-07-27 15:35:41
不存在将字符串文字“类型1”变形为System .__ ComObject的情况。你的代码片段没有意义。麻烦制造者应该是* resp *。 – 2012-07-27 16:48:47