我目前正在开发一个API。我尝试改变我的服务类中的一些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时,它第一次运行良好,但在第二次迭代时,它抛出了一个错误,没有异常消息。
您知道如何在JArray的第n个位置添加新的JObject吗?
1条答案
按热度按时间t3psigkw1#
这是因为你在
foreach
中遍历底层集合时改变了它,这就是为什么你经常看到人们在做这样的操作时初始化一个新的List<T>
,以避免这个错误。它实际上会产生以下异常:
运行时异常(第21行):集合已修改;枚举操作可能无法执行。
系统操作无效异常:集合已修改;枚举操作可能无法执行。
最简单的解决方法是创建一个新的集合,并将内容放置在您希望放置的位置。在您的情况下,这可能类似于:
这是一个**.NET Fiddle**