【问题标题】:Remove Children from Json object从 Json 对象中删除子对象
【发布时间】:2018-07-30 11:54:44
【问题描述】:

我有一个序列化的 JsonObject,我必须从其中一个子元素中删除除一个 json 元素或数组之外的所有元素。

{
"Index": "1",
"DoCID": "",
"Sin_id": "{xxxx}",
"Loan_LastModified": "2015-03-30T08:31:20-04:00",
"Col_1": null,
"col_2": null,
"ChildPair": [{
    "Index": 1,
    "Fields_35": "",
    "Fields_52": "",
    "Fields_1811": "PrimaryResidence",
    "Fields_4000": "discount point",
    "Fields_4077": null
}, {
    "Index": 2,
    "Fields_35": "",
    "Fields_52": "",
    "Fields_1811": "PrimaryResidence",
    "Fields_4000": "discount point",
    "Fields_4077": null
}, {
    "Index": 3,
    "Fields_35": "",
    "Fields_52": "",
    "Fields_1811": "PrimaryResidence",
    "Fields_4000": "discount point",
    "Fields_4077": null
},{
    "Index": 4,
    "Fields_35": "",
    "Fields_52": "",
    "Fields_1811": "PrimaryResidence",
    "Fields_4000": "discount point",
    "Fields_4077": null
}]

} 在 childPair 中,我需要删除除第一个索引之外的所有索引。 请帮忙。 谢谢

【问题讨论】:

  • 到目前为止您尝试过的任何代码?
  • 是的,我尝试了一些,:1)var o = (Newtonsoft.Json.Linq.JObject)JsonConvert.DeserializeObject(raw); o.Children().Last().First().Next.Remove(); var aa = o.Last.First.ToArray().ToList(); 2)foreach(o.Children()中的var键){foreach(o[“ChildPair”]中的var项){if(item.Path!=“ChildPair[0]”){item.Remove(); } }

标签: json c#-4.0 serialization json.net json-deserialization


【解决方案1】:

如果我理解正确的话,这样的事情应该可以工作。我正在删除索引大于 1 的所有 ChildPair 对象。如有必要,可以更改谓词以执行类似任务

class RootClass
{
    public string Index { get; set; }
 [JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
    public string DoCID { get; set; }
    public string Sin_id { get; set; }
    public DateTime Loan_LastModified { get; set; }
    public object Col_1 { get; set; }
    public object col_2 { get; set; }
    public List<ChildPair> ChildPair { get; set; }
}

class ChildPair
{
    public int Index { get; set; }
    public string Fields_35 { get; set; }
    public string Fields_52 { get; set; }
    public string Fields_1811 { get; set; }
    public string Fields_4000 { get; set; }
    public object Fields_4077 { get; set; }
}

var json = @"{
                    ""Index"": ""1"",
                    ""DoCID"": """",
                    ""Sin_id"": ""{xxxx}"",
                    ""Loan_LastModified"": ""2015-03-30T08:31:20-04:00"",
                    ""Col_1"": null,
                    ""col_2"": null,
                    ""ChildPair"": [{
                        ""Index"": 1,
                        ""Fields_35"": """",
                        ""Fields_52"": """",
                        ""Fields_1811"": ""PrimaryResidence"",
                        ""Fields_4000"": ""discount point"",
                        ""Fields_4077"": null
                    }, {
                        ""Index"": 2,
                        ""Fields_35"": """",
                        ""Fields_52"": """",
                        ""Fields_1811"": ""PrimaryResidence"",
                        ""Fields_4000"": ""discount point"",
                        ""Fields_4077"": null
                    }, {
                        ""Index"": 3,
                        ""Fields_35"": """",
                        ""Fields_52"": """",
                        ""Fields_1811"": ""PrimaryResidence"",
                        ""Fields_4000"": ""discount point"",
                        ""Fields_4077"": null
                    },{
                        ""Index"": 4,
                        ""Fields_35"": """",
                        ""Fields_52"": """",
                        ""Fields_1811"": ""PrimaryResidence"",
                        ""Fields_4000"": ""discount point"",
                        ""Fields_4077"": null
                    }]}";

var res = JsonConvert.DeserializeObject<RootClass>(json);

res.ChildPair.RemoveAll(childPair => childPair.Index != 1);

如果您想跳过空属性(例如 DocID ),您可以尝试:

var output = JsonConvert.SerializeObject(rootObject, 
                        Newtonsoft.Json.Formatting.None, 
                        new JsonSerializerSettings { 
                            NullValueHandling =NullValueHandling.Ignore
                        });

如果为空,这将从输出中删除 DocID 或 Sin_Id。

.. 并从输出中删除 DocID 和 Sin_id,无论它们是否为空:

using Newtonsoft.Json.Linq;
JObject rootObject = JObject.Parse(json);

rootObject.Property("DoCID").Remove();
rootObject.Property("Sin_id").Remove();

var output = JsonConvert.SerializeObject(rootObject);

Console.WriteLine("Output: " + output);

【讨论】:

  • 非常感谢@Terry Lennox ...它就像一个魅力..非常感谢..
  • 嘿特里,你能告诉我如何删除除 Sin_Id 和 DocID 之外的所有内容,谢谢
  • 如果您不需要 Sin_Id 或 DocID,只需从类 RootClass 中删除这些属性!
  • 我知道这个要从类中删除,但我不能,原因是其他开发人员在其他地方使用它,所以我被要求从输出中删除。很抱歉。
  • 没问题!,如果不希望它们出现在输出中,则需要将它们设置为null,还要修改为在两个属性上具有属性[JsonProperty(NullValueHandling=NullValueHandling.Ignore) ],这样它们就不会出现在输出中。我会更新答案!
猜你喜欢
  • 1970-01-01
  • 2021-10-14
  • 2014-09-06
  • 2021-11-11
  • 2012-02-29
  • 2019-11-25
  • 2017-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多