亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何有選擇地從現有 JSON 字符串中刪除某些屬性?

如何有選擇地從現有 JSON 字符串中刪除某些屬性?

C#
嚕嚕噠 2023-09-16 15:50:06
我有一個嵌套的 JSON 字符串。我想減小 JSON 的大小,僅選擇部分屬性并忽略其余屬性。我該怎么做?JSON 字符串示例:[    {        "ID": 17,        "Code": "1",        "SupplierID": 24,        "Date": "2018-07-04T10:16:37.107",        "OrderDetails": [            {                "ID": 17,                "OrderID": 17,                "ItemID": 5806,                "Quantity": 20000.0,                "ConfirmQuantity": 20000.0,                "ConfirmDate": "2018-09-11T11:33:30.463",                "Deadline": "2018-07-22T00:00:00",                "IsCanceled": false,                "PersonnelID": 667,                "IsConfirmed": false            },            {                "ID": 190,                "OrderID": 170,                "ItemID": 5806,                "Quantity": 20000.0,                "ConfirmQuantity": 20000.0,                "ConfirmDate": "2018-09-11T11:33:30.463",                "Deadline": "2018-07-22T00:00:00",                "IsCanceled": false,                "PersonnelID": 6670,                "IsConfirmed": false            }        ]    },    {        "ID": 19,        "Code": "2",        "SupplierID": 20,        "Date": "2018-07-14T13:25:50.030",        "OrderDetails": [            {                "ID": 18,                "OrderID": 19,                "ItemID": 15425,                "Quantity": 2100.0,                "ConfirmQuantity": 2100.0,                "Deadline": "2018-07-18T00:00:00",                "IsCanceled": false,                "PersonnelID": 445,                "IsConfirmed": false            }        ]    }]期望的結果:[    {        "ID": 17,        "Code": "1",        "OrderDetails": [            {                "ID": 17,                "ItemID": 5806,                "Quantity": 20000.0,            },            {                "ID": 190,                "ItemID": 5806,                "Quantity": 20000.0,            }        ]    },
查看完整描述

2 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

您可以使用 Json.Net 的LINQ-to-JSON?API 執行以下操作:

var namesToKeep = new string[] { "ID", "Code", "OrderDetails", "ItemID", "Quantity" };

var jArray = JArray.Parse(jsonString);

foreach (var prop in jArray.Descendants().OfType<JProperty>().ToList())

{

? ? if (!namesToKeep.Contains(prop.Name))

? ? ? ? prop.Remove();

}

jsonString = jArray.ToString();

小提琴: https:?//dotnetfiddle.net/Pj9Wsu


查看完整回答
反對 回復 2023-09-16
?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

為了從序列化中排除屬性,您需要使用[JsonIgnore]attribute 來標記屬性。


像這樣的東西:


public class OrderDetail

{

    public int ID { get; set; }

    public int OrderID { get; set; }

    public int ItemID { get; set; }

    [JsonIgnore]

    public double Quantity { get; set; }

    [JsonIgnore]

    public double ConfirmQuantity { get; set; }

    [JsonIgnore]

    public DateTime ConfirmDate { get; set; }

    [JsonIgnore]

    public DateTime Deadline { get; set; }

    [JsonIgnore]

    public bool IsCanceled { get; set; }

    [JsonIgnore]

    public int PersonnelID { get; set; }

    [JsonIgnore]

    public bool IsConfirmed { get; set; }

}


public class RootObject

{

    public int ID { get; set; }

    public string Code { get; set; }

    [JsonIgnore]

    public int SupplierID { get; set; }

    [JsonIgnore]

    public DateTime Date { get; set; }

    public List<OrderDetail> OrderDetails { get; set; }

}

但我實際上建議您將原始集合投影到具有屬性子集的對象集合中。


最簡單的方法是僅使用要序列化的屬性定義新類,并將其從一個類映射到另一個類(使用普通 LINQSelect或某種映射器):


public class OrderDetailModel

{

    public int ID { get; set; }

    public int OrderID { get; set; }

    public int ItemID { get; set; }

}


public class RootObjectModel

{

    public int ID { get; set; }

    public string Code { get; set; }

    public List<OrderDetailModel> OrderDetails { get; set; }

}


查看完整回答
反對 回復 2023-09-16
  • 2 回答
  • 0 關注
  • 147 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號