2015-06-22 33 views
4

C#的新手,但在PowerShell中經驗豐富。接管別人的代碼。編寫一個編譯好的PowerShell模塊,並試圖找出如何基於返回的數據創建一個對象。眼下,代碼返回一個字符串:在C#cmdlet中創建PowerShell PSObject

ServerResponse<UCCSiteModel> requestModel = this.MakeRequest("/site/api/", "site", "GET", this.Credentials, queryString); 
StringBuilder builder = new StringBuilder(); 

if (requestModel != null && requestModel.Response != null) 
{ 
    builder.AppendLine("SiteID: " + requestModel.Response.SiteID); 
    builder.AppendLine("Identity: " + requestModel.Response.SiteName); 
    builder.AppendLine("Site Code: " + requestModel.Response.SiteCode); 
    builder.AppendLine("Contact Name: " + requestModel.Response.ContactName); 
    builder.AppendLine("Contact Number: " + requestModel.Response.ContactNumber); 
    builder.AppendLine("Contact Email Address: " + requestModel.Response.ContactEmailAddress); 
    builder.AppendLine("Address: " + requestModel.Response.Address); 
    builder.AppendLine("City: " + requestModel.Response.City); 
    builder.AppendLine("State: " + requestModel.Response.State); 
    builder.AppendLine("Post Code: " + requestModel.Response.PostCode); 
    builder.AppendLine("Time Zone: " + requestModel.Response.Timezone); 
    builder.AppendLine("Longitude: " + requestModel.Response.longitude); 
    builder.AppendLine("Latitude: " + requestModel.Response.latitude);      
    this.WriteResponse(requestModel, builder.ToString()); 
} 

如何創建從requestModel.Response的對象發送回的PowerShell不是字符串的?在編寫PowerShell時,我通常會使用New-Object PsObject,然後使用Add-Member。不知道如何在C#中做到這一點,或者它叫什麼(所以我可以搜索)。任何人?

+0

你爲什麼不直接返回'requestModel'或'requestModel.Response'? –

+0

,因爲它包含了一些像一個大的blob,我不想在對象中的東西。 –

回答

4

您可以通過簡單地在你的PSObject(我會在屬性名稱更改爲駝峯匹配在PowerShell中輕鬆無障礙的)的Members屬性調用Add()Add-Member行爲:

if (requestModel != null && requestModel.Response != null) 
{ 
    PSObject responseObject = new PSObject(); 

    responseObject.Members.Add(new PSNoteProperty("SiteID", requestModel.Response.SiteID)); 
    responseObject.Members.Add(new PSNoteProperty("Identity", requestModel.Response.SiteName)); 
    // and so on etc... 
    responseObject.Members.Add(new PSNoteProperty("Latitude", requestModel.Response.latitude)); 

    this.WriteObject(responseObject); 
} 
+0

因此,這給我與我試過的其他方法相同的問題。在WriteResponse行中,responseObject報告「參數類型'System.Management.Automation.PSObject'不能分配給參數類型'字符串' –

+0

對不起,有人認爲你繼承了'Cmdlet'類(在這種情況下,你會使用'WriteObject()'而不是'WriteResponse()'來返回對象) –

+0

這是個竅門,我非常感謝大家的意見和建議。 –

2

不知道所有的細節我不能說這是最好的計劃,但這是我會做的。你可以定義一個類然後返回它。所以,你會創建一個新的類,如下面:

public class RequestResponse { 
    public int SiteID { get; set;} 
    public string Identity { get; set; } 
    other fields... 
} 

接下來,您發佈的代碼,您將創建對象,然後填充類的屬性。

var response = new RequestResponse(); 

if (requestModel != null && requestModel.Response != null) 
{ 
    response.SiteID = requestModel.Response.SiteID; 
    response.Identity = requestModel.Response.Identity ; 

    fill in other fields... 
    this.WriteResponse(requestModel, response); 
} 

我希望這能讓你開始朝正確的方向發展。

韋德

相關問題