【问题标题】:Deserializing custom JSON in C#在 C# 中反序列化自定义 JSON
【发布时间】:2021-10-25 19:46:40
【问题描述】:

我正在尝试将一些自定义 JSON 反序列化到字典中,但我很难弄清楚如何处理它。我在拥有 Model 类之前已经完成了它,但在这种情况下,我需要以特定的方式完成它。

这是 Json 的样子:

 {
     Values:
        {
          "Value1":"XXX",
          "value2" :
                 {
                       "SubValue1":"YX",
                       "SubValue2":"AB"
                 }
       }
}

这里的目标是创建一个 Dictionary 并填充它,这样:

    Key          Value
    Value1       XXX
    Value2       {
                   "SubValue1":"YX",
                   "SubValue2":"AB"
                 }   

有没有一种快速的方法可以像这样对它进行反序列化?有关如何轻松完成此操作的任何提示或提示?

【问题讨论】:

  • 您打算如何将这些数据放入Dictionary<string,string>?也许是Dictionary<string,object>?无论哪种方式,我相信您都需要处理反序列化(自定义转换器)...
  • 这应该几乎直接使用 Newtonsoft 反序列化,并使用 [I]Dictionary<string,X> 作为目标(将值映射到对象或字符串,具体取决于所需的结果,因为问题尚不清楚)。尝试这样做的结果是什么?还是序列化仅限于Text.Json
  • @zaggler,对于 Value2,值不能简单地作为 JSON 块作为字符串吗?
  • @Sandro 是的,它可以,但是你需要反序列化它才能得到你需要的东西......这取决于你想如何处理这些数据。
  • Newtonsoft 的 JObject 是 IDictionary,但也可以在不进一步反序列化的情况下更深入。

标签: c# json asp.net-core


【解决方案1】:

试试这个,我把你的 json 转换成 Dictionary

var json = "{\"Values\":{\"Value1\":\"XXX\",\"value2\":{\"SubValue1\":\"YX\",\"SubValue2\":\"AB\"}}}";
var jsonDeserialized =  JsonConvert.DeserializeObject<Root>(json);

Dictionary<string,string>  dict = jsonDeserialized.Values.ToDictionary(i => i.Key, j => j.Value.ToString());

dict["value2"] = dict["value2"].Replace("\n", "").Replace("\r", "");

输出

{
  "Value1": "XXX",
  "value2": "{\"SubValue1\":\"YX\",\"SubValue2\":\"AB\"}"
}

如何使用

string value1 = dict["Value1"];
Value value2 = JsonConvert.DeserializeObject<Value>(dict["value2"]);
Values values = new Values { Value1=value1, Value2=value2 };

值1

XXX

值2

{
"SubValue1":"YX",
"SubValue2":"AB"
}

public class Values
{
    public string Value1 {get; set;}
    public Value Value2 {get; set;}
}
public class Value
{
    public string SubValue1 { get; set; }
    public string SubValue2 { get; set; }
}
public class Root
{
    public Dictionary<string, Object> Values { get; set; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-12
    相关资源
    最近更新 更多