使用unity3D实用程序反序列化Json字符串,其中包括列表列表

问题描述 投票:0回答:1

我正在尝试使用此代码基于此Json字符串序列化unity3D中的对象:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Cache-Control": "max-stale=0", 
    "Host": "httpbin.org", 
    "If-Modified-Since": "Mon, 30 Dec 2019 13:08:47 GMT", 
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
  }, 
  "origin": "194.126.25.28, 194.126.25.28", 
  "url": "https://httpbin.org/get"
}

我遇到了以下问题:

  1. 具有唯一类型的列表将不会在输出中识别。
  2. 列表将用方括号而不是大括号打印出来。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Net;

public class Test01 : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        WebClient wc = new WebClient();
        string JsonString = wc.DownloadString("http://httpbin.org/get");
        print(JsonString);
        JsonArgs Args = new JsonArgs();

        //Get The objects from Json String
        Args = JsonUtility.FromJson<JsonArgs>(JsonString);

        //serialising Json again to print it to the console
        string json = JsonUtility.ToJson(Args);                
        print(json);
    }

    public class JsonArgs {
        //private static Headers HD = new Headers();
        public List<string> args = new List<string>();        
        public List<headers> headers = new List<headers>();
        public string origin;
        public string url;
    }

    public class headers {
        public string Accept;
        public string Accept_Encoding;
        public string Accept_Language;
        public string Cache_Control;
        public string Host;
        public string If_Modified_Since;
        public string Upgrade_Insecure_Requests;
        public string User_Agent;
    }    
}
c# json
1个回答
0
投票

因为headerargs都不是List的类型。您需要更改JsonArgs,如下所示:

public class JsonArgs 
{
    //Removed List of string and create args class
    public args args;

    //Removed List of headers
    public headers headers;
    public string origin;
    public string url;
}

public class headers 
{
    public string Accept;
    public string Accept_Encoding;
    public string Accept_Language;
    public string Cache_Control;
    public string Host;
    public string If_Modified_Since;
    public string Upgrade_Insecure_Requests;
    public string User_Agent;
}  

public class args
{

}
  1. List<string> headers移至headers
  2. 创建args类而不是List<string> args。在您的Json字符串中,args等于{},表示对象没有任何属性!?。因此,从此Json很难定义args类的属性。但它对于空对象也适用。
© www.soinside.com 2019 - 2024. All rights reserved.