[英]Add JObject to JArray on nth position
我目前正在使用ASP.NET Web API .NET Framework 4.7.2。 我嘗試在服務類中更改一些JSON數據。 我嘗試在JArray中的每個第二個對象之后添加一個新對象。
我考慮過要處理JSON數據,而不要處理具體對象,因為接收到的數據很可能是動態數據。 我正在使用庫JObject,但是沒有任何真正的異常消息,但出現了一些錯誤。
我收到的JSON結構如下所示:
{ "data" : [
{"IsPlaceholder": 0, "Name" : "Test1", "Size" : 2 },
{"IsPlaceholder": 0, "Name" : "Test2", "Size" : 3 },
{"IsPlaceholder": 0, "Name" : "Test3", "Size" : 1 }
]}
我的服務類別如下:
public class MyService : IMyService
{
public async Task<JObject> UpdateInformationAsync(JObject coolData)
{
// Random placeholder, new placeholder object after 2nd
var placeholder = JObject.FromObject(new PlaceholderVm());
var cnt = 0;
foreach (JObject c in coolData["data"] as JArray)
{
if (cnt % 2 == 0)
{
coolData["data"][cnt].AddAfterSelf(placeholder);
}
cnt++;
}
return coolData;
}
}
我的占位符視圖模型如下所示:
public class PlaceholderVm
{
public int IsPlaceholder => 1;
public string Name => "Placeholder";
public float Size { get; set; } = 0;
}
當我嘗試向JArray中添加一個placeholderVm時,它第一次運行良好,但是在第二次迭代中,它拋出一個錯誤而沒有異常消息。
您知道如何將第n個位置的新JObject添加到JArray嗎?
謝謝!
這是因為您正在對基礎集合進行變異,同時在foreach
對其進行循環。 這就是為什么您經常會在執行此類操作時看到人們初始化一個新的List<T>
以避免該錯誤的原因。
實際上會產生此異常:
運行時異常(第21行):集合已修改; 枚舉操作可能無法執行。
System.InvalidOperationException:集合已修改; 枚舉操作可能無法執行。
解決它的最簡單方法是簡單地創建一個新集合,然后將它們放置在您希望它們放到哪里。 就您而言,這可能類似於:
var jObject = new JObject();
JArray jArray = new JArray();
foreach (JObject c in coolData["data"] as JArray)
{
jArray.Add(c);
if (cnt % 2 == 0)
{
jArray[jArray.Count - 1].AddAfterSelf(placeholder);
}
cnt++;
}
jObject.Add("data", jArray);
這是一個.NET小提琴
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.