2017-06-05 75 views
1

代碼重用的可用性創建類我作爲從嵌套JSON在C#

{ "ResultOne":{ "Value1":2,"Value2":3,"Type":"SimpleAdd","Result":5}} 

很少有其他的JSON數據JSON數據來作爲

{ "ResultTwo":{ "Value1":2,"Value2":3,"Type":"SimpleSubtract","Result":-1}} 

{ "ResultThree":{ "Value1":2,"Value2":3,"Type":"SimpleMultiply","Result":6}} 

等。

所以基本上,內部JSON保持不變,而外部值保持不變。我使用json2csharp.com來生成類(以使事情更簡單)。

public class ResultOne 
{ 
    public int Value1 { get; set; } 
    public int Value2 { get; set; } 
    public string Type { get; set; } 
    public int Result { get; set; } 
} 

public class RootObject 
{ 
    public ResultOne ResultOne { get; set; } 
} 

我怎樣才能在C#創建一個類來在正確的方向重用代碼(而不是創建用於Rootobject每個結果的多個屬性,可以是反射? 任何指針是有幫助的。謝謝。

編輯:。 其實我使用代理來調用服務器,以獲得JSON響應

delegate Task<RootObject> Operation(int Value1, int Value2); 

委託是用於通過如下方法變量此操作opMeth將決定O型f我們收到的結果。這將取決於用戶的輸入。所以我不能使用ResultOne,但在下面的方法中需要一個通用的結果。

private async Task<string> DoSomeOp(int Value1, int Value2, Operation opMeth) 
    { 
     var opResult = await opMeth(Value1, Value1); 
     string resultValue = opResult.ResultOne.Result; 
     return resultValue; 
    } 
+4

你可以把它反序列化到詞典<字符串,ResultClass > –

+0

@SirRufo - 你能舉一個例子。 – superstar

+0

JsonConvert.DeserializeObject >(jsonResultString); –

回答

1

嘛,雖然你的JSON是非常簡單的,並表示簡單的字典類型,可避免產生任何類可言,採用動態:

using Newtonsoft.Json; 
using System; 

namespace ConsoleApp1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var str = "{ \"ResultTwo\":{ \"Value1\":2,\"Value2\":3,\"Type\":\"SimpleSubtract\",\"Result\":-1}}"; 

      dynamic des = JsonConvert.DeserializeObject(str); 
      var val = (int)des.ResultTwo.Value1; 
      Console.WriteLine(val); 
     } 
    } 
} 
+0

感謝您的回覆。更詳細地更新了這個問題。看看它是否可以提供更多的見解,爲什麼我創建一個班。 – superstar