我正在尝试使用C#为Google助手参数对象(https://developers.google.com/actions/reference/rest/Shared.Types/Argument)创建数据模型。这是Google在链接中提供的文档的摘录。这是他们发布到我的API的Json对象的格式。
{
"name": string,
"rawText": string,
"textValue": string,
"status": {
object(Status)
},
// Union field value can be only one of the following:
"intValue": string,
"floatValue": number,
"boolValue": boolean,
"datetimeValue": {
object(DateTime)
},
"placeValue": {
object(Location)
},
"extension": {
"@type": string,
field1: ...,
...
},
"structuredValue": {
object
}
// End of list of possible types for union field value.
}
“ //联合字段值只能是以下之一”之后,我感到困惑。如果我不知道Google将向我发送什么对象,我不知道如何将对象反序列化为我的数据模型。
我尝试列出模型中所有可能的类型
public class Argument
{
[JsonProperty("name")]
public string Name { get; set; }
[JsonProperty("rawText")]
public string RawText { get; set; }
[JsonProperty("textValue")]
public string TextValue { get; set; }
[JsonProperty("status")]
public Status Status { get; set; }
[JsonProperty("intValue")]
public int IntValue { get; set; }
[JsonProperty("floatValue")]
public float FloatValue { get; set; }
[JsonProperty("boolValue")]
public bool BoolValue { get; set; }
[JsonProperty("datetimeValue")]
public GoogleDateTime DateTimeValue { get; set; }
[JsonProperty("placeValue")]
public Location PlaceValue { get; set; }
[JsonProperty("extensions")]
public KeyValuePair<string, string> Extensions { get; set; }
[JsonProperty("structuredValue")]
public JObject StructuredValue { get; set; }
}
这是Google发布到我的Web API的Json的参数部分
"arguments": [
{
"name": "trigger_query",
"rawText": "what's happening today",
"textValue": "what's happening today"
},
{
"name": "DATEFIELD",
"rawText": "today",
"textValue": "today",
"dateValue": {
"year": 2018,
"month": 10,
"day": 23
}
}
]
在这种特殊情况下,Google应该向我发送日期。当我查看上方的原始Json时,Google并未在dateTimeValue中发送日期,如文档所示,它向我发送了dateValue。当我为模型添加dateValue属性时,它可以工作,但是似乎与文档不匹配。当只需要一个值时,拥有所有不同类型的值似乎不是正确的代码。设计数据模型的最佳方法是什么?