Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未使用.Add()将项目添加到列表中_C#_List_Deserialization_Setter - Fatal编程技术网

C# 未使用.Add()将项目添加到列表中

C# 未使用.Add()将项目添加到列表中,c#,list,deserialization,setter,C#,List,Deserialization,Setter,我有一个名为Model的类,它包含一个属性Elements。在json反序列化之后,我希望将新生成的对象添加到元素列表中——但是,它没有被添加 首先,我的模型.cs: public class Model { public new IEnumerable<Element> Elements { get; } public new IEnumerable<Connection> Connections { get; } } 公共类模型 { 公共新IEnumerab

我有一个名为
Model
的类,它包含一个属性
Elements
。在json反序列化之后,我希望将新生成的对象添加到
元素列表中
——但是,它没有被添加

首先,我的模型.cs

public class Model
{
  public new IEnumerable<Element> Elements { get; }
  public new IEnumerable<Connection> Connections { get; }
}
公共类模型
{
公共新IEnumerable元素{get;}
公共新IEnumerable连接{get;}
}
请注意,没有setter,我无法添加它们。这个类应该保持原样

接下来是反序列化和我尝试将元素添加到新创建的模型中

Model newModel = new Model();

foreach (var item in jsonResponse) {
   JArray jElements = (JArray) item.Value;
   foreach (var rItem in jElements) {
      JObject rItemValueJson = (JObject) rItem;
      Models.Element rowsResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.Element>(rItemValueJson.ToString());
           
      newModel.Elements.ToList().Add(rowsResult);
   }
}
Model newModel=newModel();
foreach(jsonResponse中的var项){
JArray元素=(JArray)item.Value;
foreach(在jElements中的varritem){
JObject-rItemValueJson=(JObject)rItem;
Models.Element rowsResult=Newtonsoft.Json.JsonConvert.DeserializeObject(rItemValueJson.ToString());
newModel.Elements.ToList().Add(rowsResult);
}
}
我无法实例化如下所示的新列表:
newModel.Elements=newlist()

或者分配
行结果
,因为:

属性或索引器“Model.Elements”无法分配给--它是只读的 属性Model.Elements没有setter


除了我前面提到的添加一个setter之外,是否有任何可能的解决方法?

IEnumerable
是一个迭代器;你不能增加它。调用
ToList()
将创建一个新列表,并且不会影响原始的
IEnumerable
。您将需要更新您的
模型
类以允许此操作;将其更改为可修改的集合,例如
ICollection
或添加setter。一个选项是添加
private
setter;Json.Net使用反射,因此仍然能够反序列化到这些反射。您可以在
模型中将
IEnumerable
更改为
IList
,然后在
元素上调用
Add
添加到它。如果您不能像您所说的那样更改
模型
类,那么就没有办法了。顺便说一下,
newModel.Elements.ToList()
正在将
Elements
转换为一个新的
列表
,并添加到其中。它不会添加到
元素
。感谢您在这方面的输入!不幸的是,
模型
位于我无法编辑的
.dll中。此外,我不认为可以支持更改,因为它可能会破坏其他一些功能。因此,
IEnumerable
必须保持原样@JohnathanBarclay,我可以在
模型
类之外添加这些私有setter吗?
模型
的设计方式是
元素
是只读的;所以你试图用作者不想用的方式来使用它。这样做可能会干扰它的实现,所以不要尝试这样做。除了使用
型号
,还有其他选择吗?你想达到什么目标?