Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/290.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# Unity中的嵌套类和保存json问题_C#_Json_Unity3d - Fatal编程技术网

C# Unity中的嵌套类和保存json问题

C# Unity中的嵌套类和保存json问题,c#,json,unity3d,C#,Json,Unity3d,我有这段代码来保存json,但不是每次按下按钮都添加新的礼物,而是用新数据替换礼物细节的第二部分 我需要编辑或添加什么代码来防止这种情况发生,这样才能完美地添加新的GiftDetail 我的json: { "GValue": 1, "GName": "Father Gift", "GiftDetails": [ { "GDetailValue": 5, "GDetailName": "3", "GDetailWe

我有这段代码来保存json,但不是每次按下按钮都添加新的礼物,而是用新数据替换礼物细节的第二部分

我需要编辑或添加什么代码来防止这种情况发生,这样才能完美地添加新的GiftDetail

我的json:

{
    "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);