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

问题描述 投票:1回答:2

我有以下字符串:

{
  "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; }
}

但是,我仍然需要处理字符串。有没有一种方法可以反序列化它以便将其保存在数组中?

c# json public
2个回答
2
投票

这将是一种了解数据的方法。 我从名为json1.json的文件中读取了json,]

自定义转换器

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

模型

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

    [JsonConverter(typeof(StringToListConverter<List<int>>))]
    public List<double[]> 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();
}

0
投票

您可以使用JObject / JArray手动解析它,data1m应该首先反序列化为字符串,然后反序列化为Listdouble数组的string

© www.soinside.com 2019 - 2024. All rights reserved.