簡體   English   中英

在第n個位置將JObject添加到JArray

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM