我在嘗試獲取某個類的屬性值時遇到了一些麻煩。實施結構如下:將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