JSON反序列化C#到字典

JSON反序列化C#到字典,c#,json,list,dictionary,deserialization,C#,Json,List,Dictionary,Deserialization,我正试图用C#中的字典将以下数据格式反序列化为某种数据结构 结构如下: "Obj1": { "Value": 0.6, "Data": { "Data1": 0.1, "Data2": 0.2, "Data3": 0.3, ... } }, ... 有人知道我怎样才能做到这一点吗 谢谢。假设您的json是一个类似 Create Below Class and Deserialize it, but kee

我正试图用C#中的字典将以下数据格式反序列化为某种数据结构

结构如下:

"Obj1": {
    "Value": 0.6,
    "Data": {
        "Data1": 0.1,
        "Data2": 0.2,
        "Data3": 0.3,
        ...
    }
},
...
有人知道我怎样才能做到这一点吗


谢谢。

假设您的json是一个类似

 Create Below Class and Deserialize it, but keep in mind this type of JSON not allowed in any language. See Data Objects it's in reapeated manners so none of object Deserialize it.

 public class Data
 {
  public double Data1 { get; set; }
  public double Data2 { get; set; }
  public double Data3 { get; set; }
 }

 public class Obj1
 {
   public double Value { get; set; }
   public Data Data { get; set; }
 }

public class RootObject
{
   public Obj1 Obj1 { get; set; }
}
[
    {
        "Obj1": {
            "Value": 0.6,
            "Data": {
                "Data1": 0.1,
                "Data2": 0.2,
                "Data3": 0.3
            }
        }
    }
]
使用JSON.net将其放入字典非常简单

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

public class Obj1
{
    public double Value { get; set; }
    public Data Data { get; set; }
}

public class Data
{
    public double Data1 { get; set; }
    public double Data2 { get; set; }
    public double Data3 { get; set; }
}


string json = "[{\"Obj1\":{\"Value\":0.6,\"Data\":{\"Data1\":0.1,\"Data2\":0.2,\"Data3\":0.3}}}]";

List<RootObject> result = JsonConvert.DeserializeObject<List<RootObject>>(json);
Dictionary<double, List<double>> dict = result.ToDictionary(key => key.Obj1.Value, value => new List<double> {value.Obj1.Data.Data1, value.Obj1.Data.Data2, value.Obj1.Data.Data3});
公共类根对象
{
公共Obj1 Obj1{get;set;}
}
公共类Obj1
{
公共双值{get;set;}
公共数据数据{get;set;}
}
公共类数据
{
公共双精度数据1{get;set;}
公共双精度数据2{get;set;}
公共双精度数据3{get;set;}
}
字符串json=“[{\'Obj1\':{\'Value\':0.6,\'Data\':{\'Data1\':0.1,\'Data2\':0.2,\'Data3\':0.3}}}];
列表结果=JsonConvert.DeserializeObject(json);
Dictionary dict=result.ToDictionary(key=>key.Obj1.Value,Value=>newlist{Value.Obj1.Data.Data1,Value.Obj1.Data.Data2,Value.Obj1.Data.Data3});
就是这个

您可以下载.dll文件并“添加引用”,或者在Visual studio中使用Nuget安装它。然后你可以这样使用它:

Dictionary<string,object> dict = JsonConvert.DeserializeObject<Dictionary<string,object>>(json);
Dictionary dict=JsonConvert.DeserializeObject(json);

下面是一个使用Newtonsoft.Json的示例

首先创建您的类型:

public class Obj1
{
    public string Value { get; set; }
    public Dictionary<string,double> Data { get; set; }
}
公共类Obj1
{
公共字符串值{get;set;}
公共字典数据{get;set;}
}
然后使用以下命令序列化和反序列化

        //Json String
        var json = "{\"Value\":\"0.6\",\"Data\":{\"Data1\":0.1,\"Data2\":0.3,\"Data3\":0.3}}";

        //If you want to deserialize
        var objDeserialized = JsonConvert.DeserializeObject<Obj1>(json);


        //If you want to Serialize
        var objToSerialize = new Obj1()
        { 
            Value = "0.6",
            Data = new Dictionary<string, double>()
            {
                {"Data1",0.1 },
                {"Data2",0.3},
                {"Data3",0.3 }
            }
        };

        var serializedObj = JsonConvert.SerializeObject(objToSerialize);
//Json字符串
var json=“{\'Value\':\'0.6\',\'Data\':{\'Data1\':0.1,\'Data2\':0.3,\'Data3\':0.3}”;
//如果你想反序列化
var objDeserialized=JsonConvert.DeserializeObject(json);
//如果要序列化
var objToSerialize=new Obj1()
{ 
Value=“0.6”,
数据=新字典()
{
{“Data1”,0.1},
{“数据2”,0.3},
{“数据3”,0.3}
}
};
var serializedObj=JsonConvert.SerializeObject(objToSerialize);

请参阅查看Newtonsofts json.NET!可能是重复的,事实上,我的数据并不是只有数据1、数据2和数据3,正如我在最初的文章中所展示的那样。另外,它可能不止Obj1。那么你的json是什么呢?我在第一篇文章中添加“…”的原因是因为我可能有更多的行。所以我可以有Data1,Data2,…,DataN,其中N可能是100,举个例子。Obj1相同。数据类型将保持不变(f.e.double)?是的……它们将保持不变