使用C#

时间:2017-06-05 19:01:16

标签: c# json

我有JSON数据

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

很少有其他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中的每个结果创建多个属性,可能是反射? 任何正确方向的指针都是有帮助的。感谢。

编辑: 我实际上是使用Delegate来调用服务器来获取JSON响应。

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

委托用于在下面的方法中作为变量传入。此操作opMeth将确定我们收到的结果类型。这取决于用户输入。所以我不能使用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;
    }

1 个答案:

答案 0 :(得分:1)

嗯,虽然你的JSON非常简单并且表示简单的Dictionary类型,但你可以通过使用动态来避免创建任何类:

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);
        }
    }
}