2011-08-07 11 views
0

我有一個類:如何在反序列化之前將json對象轉換爲自定義類型?

public class LineItemWithDetails 
{ 
     public LineItem LineItem { get; set; } 
     public object Details { get; set; } 

} 

而這需要在從JavaScript傳遞一個JSON對象一個Web服務方法,和反序列化:

[WebMethod(true)] 
public string SaveLineItemDetails(object details, int categoryId, int lineItemId) 
{ 
    JavaScriptSerializer serializer = new JavaScriptSerializer(); 
    LineItemWithDetails lineItem = serializer.Deserialize<LineItemWithDetails>(details.ToString()); 

} 

參數「細節」,看起來是這樣的: details.Details [「Name」] =「tessa」; details.Details [「PositionTitle」] =「whatever」;

我的問題是,我想在反序列化之前將LineItemDetails類中的Details屬性轉換爲BudgetPersonnel(請參見下文),以便將json對象的值分配給BudgetPersonnel屬性。 BudgetPersonnel只是一種類型的示例,還有其他幾種。要轉換的是由webservice方法中的categoryId參數確定的。我已經通過了很多關於通用鑄造的教程,並且他們工作。但是,我不明白如何在反序列化之前做到這一點。上面SaveLineItemDetails中列出的代碼反序列化,但Details屬性顯然只是一個對象,而不是BudgetPersonnel類型。

例子:

public BudgetPersonnel(string name, string positionTitle) 
{ 
    this.Name = name; 
    this.PositionTitle = positionTitle; 
} 

回答

0

首先,我不太確定我明白你的問題,所以這是我拍的答案。

那麼你基本上想要的是一些JSON被反序列化爲BudgetPersonnel對象? 當我爲學校做了一項涉及到服務器的調用的作業,並且服務器返回一個JSON字符串時,我遇到了類似的問題。我以前只要是序列化各樣的對象作爲JSON字符串包含像這樣一個圖書館:

"class":"MyClass" 

我想這是要你?將JSON字符串轉換爲具有指定值的特定對象?我會建議使用現有的庫來做到這一點(Json.NET例如) 而只是傳遞一個JSON字符串看起來像這樣:

["Name":"tessa" , "PositionTitle":"superman"] 

我希望它幫助,如果我理解正確你的問題。

+0

謝謝回答!我認爲我的問題更多的是想解決如何在反序列化之前將LineItemDetails中的Details參數轉換爲我的自定義類型。 BudgetPersonnel只是我擁有的幾種類型之一,它們作爲categoryId傳遞給webservice方法。我稍微更新了我的問題,希望更清楚。 – tessa

+0

如何投射尚未反序列化的對象?解決方法是將JSON字符串反序列化爲「最適合」的類型,然後執行轉換。正如我在我的回答中所建議的那樣,編寫自己的反序列化代碼會更有效且不易出錯。 –

相關問題