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吗?模型
的设计方式是元素
是只读的;所以你试图用作者不想用的方式来使用它。这样做可能会干扰它的实现,所以不要尝试这样做。除了使用型号
,还有其他选择吗?你想达到什么目标?