如何从 C# 创建不同数据类型的列表或数组以保存到 Unity 中的 JSON

How do I create a List or Array of different data types from C# to be saved to JSON in Unity

我希望我的输出 JSON 包含如下所示的简单数组

{
"attributes":[
        {
            "trait_type": "Background",
            "value": "Green"
        },
        {
            "trait_type": "Body",
            "value": "Body_1"
        },
        {
            "trait_type": "Outfit",
            "value": "Beach_Singlet"
        },
        {
            "display_type":"date",
            "trait_type":"birthday",
            "value":869270400
        }
    ]
}

注意数组中的最后一项与前面的项有何不同。与之前作为字符串的条目相比,名为“value”的变量也是一个整数。

我该怎么做才能输出我的 JSON 如上所示?我已经尝试创建一个可以存储所有信息的 class,但是我不能为 int 和 string 声明重用名称“value”,并且如果变量的值为 null,我也不希望显示它们 (示例如下)

{
  "attributes": [
    {
      "display_type": "",
      "trait_type": "Background",
      "value": "Green"
    },
    {
      "display_type": "",
      "trait_type": "Body",
      "value": "Body_1"
    },
    {
      "display_type": "",
      "trait_type": "Outfit",
      "value": "Beach_Singlet"
    },
    {
      "display_type": "date",
      "trait_type": "birthday",
      "value": 869270400
    }
  ]
}

试试这个

        var attributes=new List<Attribute>{
        new AttributeString{
            trait_type="Background",
            value="green"
        },
        new AttributeInt{

            display_type ="date",
            trait_type="birthday",
            value=869270400
        }
    };

    var jsonSerializerSettings = new JsonSerializerSettings()
    {
        TypeNameHandling = TypeNameHandling.Objects,
        NullValueHandling=NullValueHandling.Ignore,
        Formatting=Newtonsoft.Json.Formatting.Indented
    };

    var json = JsonConvert.SerializeObject(attributes,jsonSerializerSettings);

public class Attribute
{
    public string trait_type { get; set; }

    public string display_type { get; set; }
}
public class AttributeString:Attribute
{
        public string value { get; set; }
}
public class AttributeInt:Attribute
{
        public int value { get; set; }
}

public class AttributeList
{
    public List<Attribute> attributes { get; set; }
}

您可以使用对象类型。

using Newtonsoft.Json;

var list = new AttributeList 
{
    attributes = new []{
        new Attribute
        {
            trait_type = "Background",
            value = "green"
        },
        new Attribute
        {
            display_type = "date",
            trait_type = "birthday",
            value = 869270400
        }
    } 
};

var json = JsonConvert.SerializeObject(list, Formatting.Indented);
Console.WriteLine(json);

public class Attribute
{
    public object value { get; set; }

    public string trait_type { get; set; }

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public string display_type { get; set; }
}

public class AttributeList
{
    public Attribute[] attributes { get; set; }
}

输出:

  {
  "attributes": [
    {
      "value": "green",
      "trait_type": "Background"
    },
    {
      "value": 869270400,
      "trait_type": "birthday",
      "display_type": "date"
    }
  ]
}