我需要将以下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"
};
但是存在涉及“名称”字段的语法/格式错误,该错误不允许编译。显然是该元素的数组结构。我在语法上做错了什么?
答案 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"
};