C# Unity中的嵌套类和保存json问题
我有这段代码来保存json,但不是每次按下按钮都添加新的礼物,而是用新数据替换礼物细节的第二部分 我需要编辑或添加什么代码来防止这种情况发生,这样才能完美地添加新的GiftDetail 我的json:C# Unity中的嵌套类和保存json问题,c#,json,unity3d,C#,Json,Unity3d,我有这段代码来保存json,但不是每次按下按钮都添加新的礼物,而是用新数据替换礼物细节的第二部分 我需要编辑或添加什么代码来防止这种情况发生,这样才能完美地添加新的GiftDetail 我的json: { "GValue": 1, "GName": "Father Gift", "GiftDetails": [ { "GDetailValue": 5, "GDetailName": "3", "GDetailWe
{
"GValue": 1,
"GName": "Father Gift",
"GiftDetails": [
{
"GDetailValue": 5,
"GDetailName": "3",
"GDetailWeight": 2.0,
"GDetailAmount": 4
},
{
"GDetailValue": 2,
"GDetailName": "Gift1",
"GDetailWeight": 11.0,
"GDetailAmount": 213
}
]
},
我的班级:
[System.Serializable]
public class GiftDetail
{
public int GDetailValue;
public string GDetailName;
public double GDetailWeight;
public int GDetailAmount;
}
[System.Serializable]
public class Gift
{
public int GValue;
public string GName;
public List<GiftDetail> GiftDetails;
}
而不是
X.g值是X.GiftDetail.GDetailAmount
如果我遗漏了什么所以你们不明白就告诉我^_^
这就是我刚刚发现的,如果我按照正确的顺序创建父亲礼物,效果会很好,如果顺序错误,则表示索引超出范围。无论如何,为了得到正确的订单,我可以添加儿童礼物
GiftDetail NewGiftDetail3 = new GiftDetail
{
GDetailValue = DropDownValuePhanQua,
GDetailAmount = iSoLuongPhanQua,
GDetailName = ifTenPhanQua.text,
GDetailWeight = fTileRaPhanQua,
};
bool isGiftFound = false;
int s = 0;
while (s < _Gift.Count) //&& isGiftFound == false)
{
for (int z = 0; z < _Gift[s].GiftDetails.Count; z++)
{
if (_Gift[s].GiftDetails[z].GDetailValue == DropDownValuePhanQua && _Gift[s].GValue==DropDownValueQua)
{
isGiftFound = true;
string qweqw = _Gift[s].GiftDetails[z].GDetailName.ToString();
Debug.Log(qweqw);
_Gift[s].GiftDetails.RemoveAt(z);
_Gift[s].GiftDetails.Add(NewGiftDetail3);
}
else {
}
}
s++;
}
if (isGiftFound == false)
{
_Gift[DropDownValueQua-1].GiftDetails.Add(NewGiftDetail3);
//this code fail if I don't create Father Gift in right order of DropDownValueQua. Is there anyway else.
}
GiftDetail NewGiftDetail3=新GiftDetail
{
GDetailValue=DropDownValuePhanQua,
GDetailAmount=Isoloongphanqua,
GDetailName=ifTenPhanQua.text,
GDetailWeight=fTileRaPhanQua,
};
bool isGiftFound=false;
int s=0;
而(s<\u Gift.Count)/&&isGiftFound==false)
{
对于(int z=0;z<_Gift[s]。GiftDetails.Count;z++)
{
如果(_Gift[s].GiftDetails[z].GDetailValue==DropDownValuePhanQua&&u Gift[s].GValue==DropDownValueQua)
{
isGiftFound=true;
字符串qweqw=_Gift[s]。GiftDetails[z]。GDetailName.ToString();
Debug.Log(qweqw);
_Gift[s].GiftDetails.RemoveAt(z);
_礼品[s].GiftDetails.Add(NewGiftDetail3);
}
否则{
}
}
s++;
}
if(isGiftFound==false)
{
_礼品[DropDownValueQua-1].GiftDetails.Add(NewGiftDetail3);
//如果我没有按照正确的下拉顺序创建父亲礼物,代码就会失败。还有其他的吗。
}
以及如何访问GDetailValue=2
如果您只需要将GDetailValue
与从用户输入中接收的dropdownValue的值进行比较,请尝试下面的一行
var resultGift = gift.GiftDetails.FirstOrDefault(gd => gd.GDetailValue == DropDownValuePhanQua);
输出:
我不认为它可以是其他任何东西,因为该列表被称为GiftDetail,即使作为数组,它也会是..@BugFinder我找到了一种方法来实现它,但现在我无法获得正确的父亲礼物来添加孩子的礼物。我只是添加了我的代码OK,但是一个新的问题应该是一个新的帖子,而不是附加在这篇文章的末尾。也没有被新的问题所取代,但我确实在一开始问过如何将孩子的礼物添加到父亲的礼物中。子问题是如何调用GDetailValue=2。我使用此函数和resultGift返回null,即使GDetailValue和DropDownValuePhanQua具有相同的值,如果我不这样做,它也不允许我访问GiftDetails(礼物[0]。GiftDetailsvar resultGift=(礼物[0]。GiftDetails.FirstOrDefault(gd=>gd.GDetailValue==DropDownValuePhanQua);如果只进行比较,我认为如果(_Gift[i].GiftDetails.Exists(x=>x.GDetailValue==DropDownValuePhanQua))但是我可以得到要删除的GiftDetail[]位置,那么编辑它会更好。
GiftDetail NewGiftDetail3 = new GiftDetail
{
GDetailValue = DropDownValuePhanQua,
GDetailAmount = iSoLuongPhanQua,
GDetailName = ifTenPhanQua.text,
GDetailWeight = fTileRaPhanQua,
};
bool isGiftFound = false;
int s = 0;
while (s < _Gift.Count) //&& isGiftFound == false)
{
for (int z = 0; z < _Gift[s].GiftDetails.Count; z++)
{
if (_Gift[s].GiftDetails[z].GDetailValue == DropDownValuePhanQua && _Gift[s].GValue==DropDownValueQua)
{
isGiftFound = true;
string qweqw = _Gift[s].GiftDetails[z].GDetailName.ToString();
Debug.Log(qweqw);
_Gift[s].GiftDetails.RemoveAt(z);
_Gift[s].GiftDetails.Add(NewGiftDetail3);
}
else {
}
}
s++;
}
if (isGiftFound == false)
{
_Gift[DropDownValueQua-1].GiftDetails.Add(NewGiftDetail3);
//this code fail if I don't create Father Gift in right order of DropDownValueQua. Is there anyway else.
}
var resultGift = gift.GiftDetails.FirstOrDefault(gd => gd.GDetailValue == DropDownValuePhanQua);