从 Json 对象中删除子项

ankita25

我有一个序列化的 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 的所有 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);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章