【问题标题】:How to modify a deserialized object如何修改反序列化的对象
【发布时间】:2016-08-21 11:35:46
【问题描述】:

我有一个如下的 JSON 字符串

string str = "{"Id":["1799"],"Type":1,"Date":null,"Group":null,"Ids":1799}";

我想把它转换成下面的格式

{"Id":1799,"Type":1,"Date":null,"Group":null }

简而言之,我想删除“Ids”并将“Id”值转换为字符串。

为此,我尝试按如下方式反序列化此字符串-

object yourOjbect = new JavaScriptSerializer().DeserializeObject(str);

但我在这里卡住了。如何从此对象中删除/更改值。 我尝试将此对象转换为数组和列表,但在其中找不到删除/修改选项。

【问题讨论】:

    标签: c# json


    【解决方案1】:

    也许您可以使用来自 http://www.newtonsoft.com/json 的 JSON 框架用于 .NET(也可作为 nuget 包提供)

    然后你可以使用以下来反序列化到你的对象中

    string str = "{"Id":["1799"],"Type":1,"Date":null,"Group":null,"Ids":1799}";
    MyObject myObj = JsonConvert.DeserializeObject<MyObject>(json);
    

    然后可能为您的输出创建一个不同的对象,并有一个构造函数接受原始对象作为输入,然后将其序列化为 Json。然后,构造函数必须执行您需要的任何内部转换/更改。

    OtherObject other = new OtherObject(myObj);  //Create new object from original.  
    string json = JsonConvert.SerializeObject(other);
    

    【讨论】:

      【解决方案2】:

      展开对象。

      string str = "{"Id":["1799"],"Type":1,"Date":null,"Group":null,"Ids":1799}";
      

      最初,使用 NewtonJson lib 反序列化 json

      dynamic parsedJson = JsonConvert.DeserializeObject<dynamic>(str);
      Dynamic newStr = new ExpandoObject();
      newStr.Id = parsedJson.Id.ToString();
      newStr.Type = parsedJson.Type;
      ...
      

      然后对newStr进行序列化:

      str newJson = JsonConvert.SerializeObject(newStr);
      

      输出: {"Id":1799,"Type":1,"Date":null,"Group":null}

      【讨论】:

      • 有什么方法可以使用 c# 库来做到这一点?
      • C# 库只能帮助序列化/反序列化 json 字符串。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-02
      • 2012-11-14
      • 2011-02-27
      • 2015-03-19
      • 1970-01-01
      • 2015-06-28
      • 2011-04-06
      相关资源
      最近更新 更多