我想通過特定的“鍵”洗掉 JSON 屬性,但它沒有按預期作業。我的代碼沒有改變任何東西。
我做了以下
void Start()
{
var foodlist = new List<Food>()
{
new() { name = "Banana", price = 3000 },
new() { name = "Apple", price = 1000}
};
// SerializeObject()
string jasonString = JsonConvert.SerializeObject(foodlist);
JArray jArray = JArray.Parse(jasonString);
// Jarray => String Serialize
string jarrayString2 = JsonConvert.SerializeObject(jArray);
foreach (var jObject in jArray.Children<JObject>())
{
int indexNum = 0;
foreach (var jProperty in jObject.Properties())
{
if(jProperty.Name == "name")
{
jArray.Remove(jArray[indexNum][jProperty.Name]);
indexNum ;
}
}
}
// Check
string jarrayString = JsonConvert.SerializeObject(jArray);
print(jarrayString);
}
public class Food
{
public string name;
public int price;
}
**結果沒有改變**輸出
[{"name":"Banana","price":3000},{"name":"Apple","price":1000}]
我想要的結果
[{"price":3000},{"price":1000}]
uj5u.com熱心網友回復:
因此,您的代碼存在一些問題。首先也是最重要的似乎是一個錯誤,您在foreach屬性回圈期間而不是在物件回圈期間計算迭代次數。即,您想洗掉陣列中每個專案的屬性,但該屬性始終位于位置 0。因此,對于每個回圈,您始終洗掉位置 0 處名為“name”的物件屬性。這可以通過將值設定為來null說明洗掉它。您將看到您的輸出有第一個名稱為空的物件,但以下物件將保持不變。
我曾嘗試讓它按原樣作業,但我到達的地方基本上只是一個 for 回圈,它的作用與 foreach 相同,但需要額外的作業。
例如,我們可以嘗試修復您的初始代碼:
int indexNum = 0;
foreach (var jObject in jArray.Children<JObject>())
{
foreach (var jProperty in jObject.Properties())
{
if(jProperty.Name == "name")
{
jArray[indexNum][jProperty.Name] = null;
}
}
indexNum ;
}
這應該針對每個物件中的正確屬性,但它實際上可以簡化為如下所示:
for (int i = 0; i < jArray.Count; i )
{
var jObj = jArray[i] as JObject;
jObj.Remove("name");
}
然后進一步簡化,我們可以foreach像這樣簡單地做到這一點:
foreach (JObject jObj in jArray)
{
jObj.Remove("name");
}
編輯:我注意到頂部foreach方法拋出了一個例外“集合已修改;列舉操作可能無法執行”。所以我只是將值設定為 null 而不是嘗試洗掉它。但我會將其余的答案留作參考。
uj5u.com熱心網友回復:
只需使用JsonIgnore屬性。
指示 JsonSerializer不要序列化公共欄位或公共讀/寫屬性值。更多的...
改變:
public class Food
{
public string name;
public int price;
}
...至:
public class Food
{
[JsonIgnore] // <-------- This causes 'name' to be excluded from serialisation
public string name;
public int price;
}
...并像這樣使用:
var foodlist = new List<Food>()
{
new() { name = "Banana", price = 3000 },
new() { name = "Apple", price = 1000}
};
string jasonString = JsonConvert.SerializeObject(foodlist);
也可以看看
- JsonIgnoreAttribute , Json.NET
uj5u.com熱心網友回復:
為方便起見,如果您的 json 中有無用的資料,請忽略它們:
{
"name" : "banana",
"price" : 1000
}
[Serializable]
public class Item
{
public int price;
}
void Start()
{
Item itemInstance = JsonUtility.FromJson<Item>(json);
}
在此示例中,專案沒有“名稱”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/530334.html
上一篇:每2秒一次,將物件移動到隨機坐標
下一篇:聚合多個查找不回傳資料
