Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C#中反序列化JSON字符串?_C#_Json_Public - Fatal编程技术网

如何在C#中反序列化JSON字符串?

如何在C#中反序列化JSON字符串?,c#,json,public,C#,Json,Public,我有以下字符串: { "time": 20200526, "data1m": "[[1590451620,204.73,204.81,204.73,204.81,1.00720100],[1590451680,204.66,204.66,204.58,204.58,1.00000000],[1590452280,204.65,204.83,204.65,204.83,13.74186800],[1590452820,203.75,203.75,203.75,203.75,0.50000

我有以下字符串:

{
  "time": 20200526, 
  "data1m": "[[1590451620,204.73,204.81,204.73,204.81,1.00720100],[1590451680,204.66,204.66,204.58,204.58,1.00000000],[1590452280,204.65,204.83,204.65,204.83,13.74186800],[1590452820,203.75,203.75,203.75,203.75,0.50000000],[1590452880,203.47,203.47,203,203,1.60000000],[1590453000,203.06,203.06,203.06,203.06,4.00000000]]"
}
如何在C#中反序列化它

我使用以下代码:

result = reader.ReadToEnd();
var desc = Utilities.Jsprocessor.Deserialize<fooString>(result);

Internal class fooString
{
     public string time { get; set; }
     public string data1m { get; set; }
}
result=reader.ReadToEnd();
var desc=Utilities.Jsprocessor.Deserialize(结果);
内部类fooString
{
公共字符串时间{get;set;}
公共字符串data1m{get;set;}
}
但是,我仍然需要处理字符串。
是否有方法将其反序列化,以便将其保存在阵列中?

这将是一种数据感知方法我从一个名为json1.json的文件中读取json

public string jsonData = "";
static void Main(string[] args)
{
    using (StreamReader r = new StreamReader("json1.json"))
    {
        string json = r.ReadToEnd();
        Console.Write(json);
        var item = JsonConvert.DeserializeObject<model>(json);
    }

    Console.ReadKey();
}
自定义转换器

public class StringToListConverter<T> : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.Value is null)
        {
            return null;
        }
        List<double[]> retVal = JsonConvert.DeserializeObject<List<double[]>>(reader.Value.ToString());
        return retVal;
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}
公共类StringToListConverter:JsonConverter
{
公共覆盖布尔CanConvert(类型objectType)
{
抛出新的NotImplementedException();
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
if(reader.Value为空)
{
返回null;
}
List retVal=JsonConvert.DeserializeObject(reader.Value.ToString());
返回返回;
}
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
抛出新的NotImplementedException();
}
}
型号

public class model
{
    public int time { get; set; }

    [JsonConverter(typeof(StringToListConverter<List<int>>))]
    public List<double[]> data1m { get; set; }
}
公共类模型
{
公共整数时间{get;set;}
[JsonConverter(类型(StringToListConverter))]
公共列表data1m{get;set;}
}
样本执行

public string jsonData = "";
static void Main(string[] args)
{
    using (StreamReader r = new StreamReader("json1.json"))
    {
        string json = r.ReadToEnd();
        Console.Write(json);
        var item = JsonConvert.DeserializeObject<model>(json);
    }

    Console.ReadKey();
}
公共字符串jsonData=”“;
静态void Main(字符串[]参数)
{
使用(StreamReader r=newstreamreader(“json1.json”))
{
字符串json=r.ReadToEnd();
Console.Write(json);
var item=JsonConvert.DeserializeObject(json);
}
Console.ReadKey();
}
字符串文本={
“时间”:20200526,
“data1m:“[159045162004.73204.81204.73204.81,1.00720100],[15904516800204.66204.66204.58204.58,1.00000000],[1590452280204.65204.83204.65204.83,13.74186800],[1590452820203.75203.75203.75203.75,0.50000000],[15904528800203.47203.47203203.1.60000000],[1590453000203.06203.06203.06203.06,4.00000000]。”
}
字符串deserializedText=JsonConvert.DeserializeObject(文本);

注意:对于JsonConvert,请使用NuGet包:-“Newtonsoft.Json”

请注意,在将Json反序列化为
fooString
,然后将
fooString.data1m
反序列化为
double[]
。方法
Utilities.Jsprocessor.Deserialize来自哪个库?我在google上找不到任何东西。