我有一个名为BuildRaw的类,它有一个数据源,其中包含json数据,其模式不确定,例如
{
"event_type": "123",
"a": "a",
"b": "b"
}
或
{
"event_type": "123",
"c": "c",
"d": "d"
}
我想在反序列化时将不匹配的类成员映射到指定的集合(如下所示的“ CustomDimensions”),并在序列化时将此集合中的值写入特定的JsonProperty(如下所示的“ customDimensions”)中。它的输出预计会像
{
"event_type": "123",
"customDimensions":{
"a": "a",
"b": "b"
}
}, and
{
"event_type": "123",
"customDimensions":{
"c": "c",
"d": "d"
}
}
我尝试将这些属性像下面一样放置(是否支持放置两个属性?),
[JsonProperty("customDimensions")]
[JsonExtensionData]
但是似乎只有JsonExtensionData起作用。它可以成功反序列化,但是在序列化时会输出:
{
"event_type": "123",
"a": "a",
"b": "b"
}
,不像我预期的那样,
{
"event_type": "123",
"customDimensions":{
"a": "a",
"b": "b"
}
}
我的班级代码:
public class BuildRaw
{
[JsonProperty("customDimensions")]
[JsonExtensionData]
public IDictionary<string, object> CustomDimensions { get; set; }
[JsonProperty("event_type")]
public string EventType { get; set; }
}
答案 0 :(得分:0)
似乎您可能需要具有两个属性-一个用于接收扩展数据,另一个用于导出所需的CustomDimensions对象:
private IDictionary<string, object> _customDimensions;
[JsonExtensionData(WriteData = false)]
public IDictionary<string, object> ExtensionData
{
get { return _customDimensions; }
set { _customDimensions = value; }
}
[JsonProperty("customDimensions")]
public IDictionary<string, object> CustomDimensions
{
get { return _customDimensions; }
set { _customDimensions = value; }
}
那我们在这里拥有什么
WriteData = false
粘贴到JsonExtensionDataAttribute
,因此这应该仅用于读取而不是写入额外的值。CustomDimensions
属性。或者,您可以写一个JsonConverter
,尽管我认为那会更复杂。