2017-02-23 34 views
3

我有一個從JSON輸入字符串創建的模型。然而,其中一個叫做PortfolioHolding的類沒有一個字段,我想在我的最終結果中返回。我目前的解決方案是在我現有的Model類中添加該字段。但是,當我調試時,它失敗了BC JSON輸入字符串不正確。我嘗試添加[JsonIgnore]到我想在反序列化期間忽略的字段,但這也沒有幫助。c#如何在我的類中添加屬性而無需更改原始類

如何動態地向我的類中添加一個屬性,並根據我的JSON輸入文件使我的輸入正確?

public class PortfolioHolding 
    { 
     public string fundIdentifier { get; set; } 
     public int fundRating { get; set; } 
     public double fundExpenseRatio { get; set; } 
     public double fundWeight { get; set; } 
     [JsonIgnore] 
     public double fundAlpha { get; set; } //MODIFIED by adding fundAlpha attribute 
    } 

實際的模型沒有包括fundAlpha和我的測試在調試過程中通過。

+0

有趣的問題。想知道的一樣。 –

+0

是否要將此類序列化爲帶有附加字段的JSON? –

+0

是的,需要在@Roma序列化期間添加fundAlpha屬性。 –

回答

1

您可以從PortfolioHolding創建匿名類型和序列化:

PortfolioHolding ph = new PortfolioHolding(); 
// fill ph 

var anonymous = new 
{ 
    fundIdentifier = ph.fundIdentifier, 
    fundRating = ph.fundRating, 
    fundExpenseRatio = ph.fundExpenseRatio, 
    fundWeight = ph.fundWeight, 
    fundAlpha = neededValue // here your value from ph or any other 
}; 

var json = JsonConvert.SerializeObject(anonymous); 

// deserialize 

var deserializedAnonymous = JsonConvert.DeserializeAnonymousType(json, anonymous); 

ph.fundExpenseRatio = deserializedAnonymous.fundExpenseRatio; 
//other properties 
+0

謝謝你的回答!哪裏是添加匿名類型的最佳方式?以下是此問題的更多代碼:http:// stackoverflow。COM /問題/ 42395116/C鋒利返回多值功能於一個對象。 –

+1

@MihirPatel,匿名類型僅用於序列化/反序列化 - 只有在執行此操作之前,您應該創建它。 –

+0

非常感謝你!這工作! –

2

我很抱歉我以前提供的解決方案。

我的理解是,您想使用相同的模型類從JSON獲取輸入,並將該模型返回給您的項目外的某個模型。

可能有兩種可能的解決方案。

1)就像在場景中,您正在從數據庫(它可以是文件)讀取數據(JSON)在同一個庫或名稱空間中,那麼可以使用internal關鍵字。在相同的命名空間中,您將有權訪問該屬性,而在名稱空間之外則不會。

2)您可以從結果集像

resultSet.Select(a => new { a.col1, a.col2, a.col3, /*and skip the one which you don't want to be selected*/}) 
+0

AnotherProperty是什麼?不遵守。 –

+0

獲取第一類的錯誤PortfolioHolding:缺少聲明類型的部分修飾符... –

0

使用ExpandoObject選擇匿名對象:

代表對象,其成員可以動態添加,並在運行時間刪除。

dynamic expando = new ExpandoObject(); 
expando.Prop1= 1; 
expando.Prop2 = "Test"; 

使用反序列化時,列表:

var exConverter = new ExpandoObjectConverter(); 
dynamic obj = JsonConvert.DeserializeObject<List<ExpandoObject>>(json, exConverter); 
+0

我想我最好不要使用任何庫,但我一定會嘗試這種解決方案,一旦我可以在純c#中編寫解決方案。 –

相關問題