具有JSON数组的发布请求-无法以正确的格式发送

时间:2019-03-05 21:36:42

标签: c# json

我需要将以下JSON发布到API:

{
  "arch": {
    "id": “TrackingCode”
  },
  "nails": [{
    "name": "John"
  }],

  "token": 'RandomCode'
}

所以我这样定义数据:

public class arch
{
    [JsonProperty("id")]
    public string id { get; set; }
}

public class nails
{
    [JsonProperty("name")]
    public string[] name { get; set; }
}

public class Parameter
{
    [JsonProperty("arch")]
    public arch arch { get; set; }

    [JsonProperty("nails")]
    public nails nails{ get; set; }

    [JsonProperty("token")]
    public string token { get; set; }
}

这是在序列化之前初始化JSON的方式:

Parameter json = new Parameter
{
    arch = new arch
    {
        id = TrackingId
    },

    nails = new nails
    {
       name = "John"
    }

   token = "randomstuff"
};

但是存在涉及“名称”字段的语法/格式错误,该错误不允许编译。显然是该元素的数组结构。我在语法上做错了什么?

3 个答案:

答案 0 :(得分:2)

在参数对象中,将nails nails更改为nails[]Ienumberable<nail> nails。您的json不如您所愿的出来的原因是,指甲是一个对象,所以是一个奇异的实体。  VS数组是您想要的多个实体

答案 1 :(得分:1)

就您提供的代码而言,编译错误是因为您已将name定义为字符串数组,但是随后您试图为其分配字符串。更改为字符串数组,它将可以正常编译:

        Parameter json = new Parameter
        {
            arch = new arch
            {
                id = "1"
            },

            nails = new nails
            {
                name = new string[]{"John"}
            },

            token = "randomstuff"
        };

也就是说,这不能满足您的原始要求,即钉子应该是阵列,而不是钉子中的名称。因此,您需要更多类似的东西:

public class arch
{
    public string id { get; set; }
}

public class nails
{
    public string name { get; set; }
}

public class Parameter
{
    public arch arch { get; set; }

    public nails[] nails { get; set; }

    public string token { get; set; }
}

...

        Parameter json = new Parameter
        {
            arch = new arch
            {
                id = "1"
            },

            nails = new nails[]
            {
                new nails(){name = "John"}
            },

            token = "randomstuff"
        };

答案 2 :(得分:0)

我建议您使用http://json2csharp.com/,这对于生成JSON的类对象很有用。

使用您拥有的工具

public class Arch
{
    public string id { get; set; }
}

public class Nail
{
    public string name { get; set; }
}

public class Parameter
{
    public Arch arch { get; set; }
    public List<Nail> nails { get; set; }
    public string token { get; set; }
}

如您所见,name不应为array。相反,nails是(数组或列表)。

编辑

要初始化您的Parameter实例,您可以这样做:

Parameter json = new Parameter
{
    arch = new Arch
    {
        id = TrackingId
    },

    nails = new List<Nail>
    {
       new Nail { name = "John" }
    },

   token = "randomstuff"
};