【发布时间】:2018-01-03 00:32:47
【问题描述】:
我正在构建一个用于修改现有 json 文件的应用程序。我已经制作了与我的 json 代码对应的所有类。大多数时候我需要复制整个 json 集合,然后只更改一些内容(如 id、索引等)。
我成功复制并添加了整个集合,当我尝试更改该集合中的某些内容时,它会更改我从中进行复制的集合。你能告诉我我做错了什么吗?
private void addFlightButton_Click(object sender, RoutedEventArgs e) {
var originDestinationGroup = jsonObject.search.originDestinationGroup;
OriginDestinationGroup oDGitem = originDestinationGroup.Last();
var departureDateGroup = oDGitem.departureDateGroup;
DepartureDateGroup dDGitem = departureDateGroup.Last();
var originDestinationOptionRef = dDGitem.originDestinationOptionRef;
OriginDestinationOptionRef oDORitem = originDestinationOptionRef.Last();
originDestinationOptionRef.Add(oDORitem);
char uriNumber = oDORitem.uri[oDORitem.uri.Length - 1];
string uriString = oDORitem.uri.TrimEnd(oDORitem.uri[oDORitem.uri.Length - 1]);
int idNumber = Convert.ToInt32(oDORitem.id);
int indexNumber = oDORitem.index;
uriNumber++;
idNumber++;
indexNumber++;
OriginDestinationOptionRef oDORitemModify = originDestinationOptionRef.Last();
oDORitemModify.uri = uriString + uriNumber.ToString();
oDORitemModify.id = idNumber.ToString();
oDORitemModify.index = indexNumber;
}
json 响应 - 未修改:
"search": {
"originDestinationGroup": [{
"departureDateGroup": [{
"originDestinationOptionRef": [{
"uri": "option/1",
"id": "1",
"index": 0
},
{
"uri": "option/2",
"id": "2",
"index": 1
}
]
json 响应 - 由我的代码修改:
"search": {
"originDestinationGroup": [{
"departureDateGroup": [{
"originDestinationOptionRef": [{
"uri": "option/1",
"id": "1",
"index": 0
},
{
"uri": "option/3",
"id": "3",
"index": 2
},
{
"uri": "option/3",
"id": "3",
"index": 2
}
]
json 响应 - 应该如何修改:
"search": {
"originDestinationGroup": [{
"departureDateGroup": [{
"originDestinationOptionRef": [{
"uri": "/option/1",
"id": "1",
"index": 0
},
{
"uri": "option/2",
"id": "2",
"index": 1
},
{
"uri": "option/3",
"id": "3",
"index": 2
}
]
类:
public class Search {
public List<OriginDestinationGroup> originDestinationGroup { get; set; }
}
public class OriginDestinationGroup {
public List<DepartureDateGroup> departureDateGroup { get; set; }
}
public class DepartureDateGroup {
public List<OriginDestinationOptionRef> originDestinationOptionRef { get; set; }
}
public class OriginDestinationOptionRef {
public string uri { get; set; }
public string id { get; set; }
public int index { get; set; }
}
提前谢谢你。
【问题讨论】:
-
你能做一些更简单的 JSON 吗?它应该是什么,以及它实际上做什么?有了所有额外的数字/字母,我无法轻易分辨出它们之间的区别。
-
“当我尝试更改该集合中的某些内容时,它会更改我进行复制的集合” - 可能是因为您正在更改实际参考集合内。制作原件的副本 - 就像在集合上调用
ToList()一样简单 - 并更改副本。 -
@gilliduck 我改变了它。这对你更好吗?
-
@stuartd 您能否参考代码的实际部分,我正在更改集合中的实际引用。谢谢
-
@Adicili 现在您已经根据下面的答案简化了代码!