没有与所需形式参数对应的参数

时间:2017-05-02 19:40:29

标签: c# asp.net json

这可能不是最好的方法,但它是我知道如何处理c#的最佳方式。我试图创建一个字典,然后将其转换为json。现在我只是试着让字典与我以后想要的json格式相匹配。以下是我到目前为止的情况:

`Dictionary<Dictionary<string, string>, Dictionary<string, List<List<Decimal>>>> testDict = new Dictionary<Dictionary<string, string>, Dictionary<string, List<List<Decimal>>>>() {
    new Dictionary<string, string>() {
        { "test", "test" }
    }
};`

这给了我以下错误:

  

没有与所需形式参数对应的参数

我不知道是什么导致这种情况,任何帮助都会很棒,谢谢!

这是我尝试复制的json结构:

[
  {
    "target": "1",
    "datapoints": [
      [
        67.0,
        1491609600.0
      ]
    ]
  },
  {
    "target": "2",
    "datapoints": [
      [
        54.0,
        1491091200.0
      ],
      [
        65.0,
        1491177600.0
      ],
      [
        69.0,
        1491609600.0
      ],
      [
        65.0,
        1491696000.0
      ],
      [
        54.0,
        1491868800.0
      ],
      [
        63.0,
        1491955200.0
      ],
      [
        64.0,
        1492214400.0
      ],
      [
        57.0,
        1492732800.0
      ],
      [
        72.0,
        1492819200.0
      ],
      [
        50.0,
        1493337600.0
      ],
      [
        63.0,
        1493424000.0
      ]
    ]
  },
]

2 个答案:

答案 0 :(得分:1)

好的,不是你的问题的答案,但它会有所帮助,是你的JSON的正确结构:

public class TargetClass
{
    public string target{ get; set; }
    public List<double[]> datapoints{ get; set; }
}

那是基类。如果你想反序列化你在JSON中的内容,你会做这样的事情(假设你使用的是Newtonsoft Json,否则就改用你使用的库):

var data = Newtonsoft.Json.JsonConvert.DeserializeObject<TargetClass[]>(theString);

要序列化,你会创建这样的东西:

var items = new List<TargetClass>();

var target = new TargetClass{ target = "1", datapoints = new List<double[]>{ new double[]{ 67.0, 1491609600.0 } };

items.Add(target);

var ser = Newtonsoft.Json.JsonConvert.SerializeObject(items);

答案 1 :(得分:0)

使用匿名类型,您可以创建复杂的对象层次结构,就像编写普通的JSON一样简单:

var obj = new[] {
    new {
        target = "1",
        datapoints = new [] {
            new [] {
                67.0,
                1491609600.0
            }
        }
    },
    new {
        target = "2",
        datapoints = new [] {
            new [] {
                54.0,
                1491091200.0
            },
            new [] {
                65.0,
                1491177600.0
            },
        }
    }
};

var json = JsonConvert.SerializeObject(obj, Formatting.Indented);

演示:https://dotnetfiddle.net/jk8gho

如果此对象中的子集合是扩展的主题,则最好将这些集合明确定义为List<dynamic>。严格来说,dynamic不是必需的,可以使用显式类型,但使用dynamic可以简化定义。

var obj = new List<dynamic> {
    new {
        target = "1",
        datapoints = new List<dynamic> {
            new [] {
                67.0,
                1491609600.0
            }
        }
    },
    new {
        target = "2",
        datapoints = new List<dynamic> {
            new [] {
                54.0,
                1491091200.0
            },
            new [] {
                65.0,
                1491177600.0
            },
        }
    }
};

var target2 = obj.Where(t => t.target == "2").Single();
target2.datapoints.Add(new [] {
    64.0,
    1492214400.0
});
target2.datapoints.Add(new[] {
    57.0,
    1492732800.0
});

var target3 = new {
    target = "3",
    datapoints = new List<dynamic> { }
};
target3.datapoints.Add(new[] {
    72.0,
    1492819200.0
});
obj.Add(target3);

var json = JsonConvert.SerializeObject(obj, Formatting.Indented);

演示:https://dotnetfiddle.net/d4ZUH8