Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

! JSON !

Iniciado por KevinLastra, Agosto 06, 2017, 03:07:17 PM

Tema anterior - Siguiente tema
Agosto 06, 2017, 03:07:17 PM Ultima modificación: Agosto 06, 2017, 10:41:50 PM por pioj
Hola a todos, estoy queriendo trabajar con json pero me esta asiendo muchisimos problemas, pero por  fines didacticos los quiero usar, ahora el ultimo error que tengo es este, tengo un script que guarda la informacion de una lista a Json asi 
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using LitJson;
using System.IO;
public class SaveObjDropedPos : MonoBehaviour {
    private JsonData data;
    private JsonData itemdata;
    private string jsonstring;
    public string info;
    public List<ItemStats> ID = new List<ItemStats>();
    public ItemsManager items;
    private void Start()
    {
        Load();
    }
    public void Save(ItemStats item_)
    {
        ID.Add(item_);
        data = JsonMapper.ToJson(ID);
        info = data.ToString();
        File.WriteAllText(Application.dataPath + "/Json/ItemsPos.json", data.ToString());
    }
    public void Load()
    {
        jsonstring = File.ReadAllText(Application.dataPath + "/Json/ItemsPos.json");
        if (jsonstring != "")
        {
            itemdata = JsonMapper.ToObject(jsonstring);
            for (int i = 0; i < itemdata.Count; i++)
            {
                foreach (InventoryItem item in items.itemsAdd)
                {
                    if (item.ID == itemdata["ID"].ToString())
                    {
                        Transform this_ = Instantiate(item).transform;
                        this_.SetParent(GameObject.Find("ItemBox").transform);
                        this_.transform.position = new Vector3((float)itemdata["X"], (float)itemdata["Y"], (float)itemdata["Z"]);
                    }
                }
            }
        }
    }
}

 
y me sale este error gigantesco 
 

JsonException: Max allowed object depth reached while trying to export from type System.Single
LitJson.JsonMapper.WriteValue (System.Object obj, LitJson.JsonWriter writer, Boolean writer_is_private, Int32 depth)
writer_is_private, Int32 depth)
LitJson.JsonMapper.ToJson (System.Object obj)
SaveObjDropedPos.Save (.ItemStats item_) (at Assets/Scripts/Saves/SaveObjDropedPos.cs:23)
InventoryItem.SaveMe_ () (at Assets/Scripts/Player/Inventori/InventoryItem.cs:170)
GuardarPartida.Guardar () (at Assets/Scripts/Saves/GuardarPartida.cs:15)
UnityEngine.Events.InvokableCall.Invoke (System.Object[] args) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:154)
UnityEngine.Events.InvokableCallList.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:637)
UnityEngine.Events.UnityEventBase.Invoke (System.Object[] parameters) (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:773)
UnityEngine.Events.UnityEvent.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:52)
UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:35)
UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:44)
UnityEngine.EventSystems.ExecuteEvents.Execute (IPointerClickHandler handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50)
UnityEngine.EventSystems.ExecuteEvents.Execute[IPointerClickHandler] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.EventFunction`1 functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261)
UnityEngine.EventSystems.EventSystem:Update()

 
 
 
Grasias por tu atencion

Hola, y que es tu JsonData? me parece que (referenciandome en mis json) tu jsondata deberia ser una clase con la lista dentro, no lo se. No estas usando el default de Unity no? ese el LitJson quizas por eso mi confusion del data o no, aca te paso un simple ejemplo utilizando JsonUtility (> Unity 5.3):
 

public class ...... {
//clase "data"
[System.Serializable]
    public class JSONData
    {
        public float varA;
        public float varB;
        public float varC;
    }

    public void SaveGame()
    {
        JSONData data = new JSONData();
        string jsonString = string.Empty;
       
        data.varA = algunValorA;
   data.varB = algunValorB;
        data.varC = algunValorC;
        string savePath = Application.dataPath + "/Profiles/";
        if (!Directory.Exists(savePath))
            Directory.CreateDirectory(savePath);
        File.WriteAllText(savePath + "profile.json", jsonString);
        Debug.Log("Game Saved!!");
               
    }
    public void LoadGame()
    {
        JSONData data = new JSONData();
        string savePath = Application.dataPath + "/Profiles/";
        string filePath = savePath + "profile.json";
        if (!Directory.Exists(savePath))
            return;
        if (!File.Exists(filePath))
            return;
        string jsonString = File.ReadAllText(filePath);
   //aca recuperas los datos a data
        JsonUtility.FromJsonOverwrite(jsonString, data);
        //aca cargas los datos
        algunValorA = data.varA;
   algunValorB = data.varB;
        algunValorC = data.varC;
       
        Debug.Log("Game Loaded!!");
    }
         
}
 

 
 

el error esta aquí 
 

public void Save(ItemStats item_)
    {
        ID.Add(item_);
        data = JsonMapper.ToJson(ID);
        info = data.ToString();
        File.WriteAllText(Application.dataPath + "/Json/ItemsPos.json", data.ToString());
    }

 
data, tendría que ser una clase 
 

[System.Serializable]

 
y a partir de aquí, depende de como lo estés programando.
 
yo programé algo parecido, guardar información de diferentes objetos y su posición y dendiendo de que objeto era guarda algo mas. 
 
en mi caso data era una clase que contenía un diccionario de cada tipo de objeto(la key era el id y el valor era otra clase serializable que contenía los valores de ese tipo de objeto)
 
 
 
yo no use JsonMapper alguien me explica ? jajaj
 
 
 
 

Etiquetas: