我有一个json对象需要发布到网关.如下所示.
{
"client_id": "test",
"non_personalized_ads": false,
"events": [
{
"name": "test",
"params": {
"items": [
{
"iteitem1":"iteiteitem1value",
"Item1Number":1
}
],
"stringparm1":"stringValue1",
"intparm1":1
}
}
]
}
我试图在我的C#项目中创建一个对象类.问题在于,这两个PARM的名称都是可配置的.所以这些都不是静态属性名.
- "iteitem1":"iteiteitem1value",
- "Item1Number":1
- "stringparm1":"stringValue1",
- "intparm1":1
因此,为了实现这一目标,我使用了一本字典<;字符串,对象>;因为值可以是一个数字或字符串,所以我使用了一个对象.
public class EventParameter
{
public Dictionary<string, object> Parameters { get; set; }
public Dictionary<string, object> Items { get; set; }
public EventParameter()
{
Parameters = new Dictionary<string, object>();
Items = new Dictionary<string, object>();
}
public void AddEventParameter(string name, object value)
{
Parameters.Add(name, value);
}
}
不幸的是,当我做一个json PAR的时候,我得到了.这是不正确的,因为我的参数应该在parms下,而不是在它们自己的对象下.
{
"client_id": "test",
"non_personalized_ads": false,
"events": [
{
"name": "hit_event",
"params": {
"Parameters": {
"TestString": "test",
"testInt": 1
},
"Items": {
"test": 1,
"test2": 1,
"test3": "test"
}
}
}
]
}
那么,如何将参数上移到parms?感觉parms需要成为一本字典<;字符串,对象>;但这样一来,它就会错过它的项目 list
"Parameters": {
"TestString": "test",
"testInt": 1
},
我想我的模型设计中少了一些东西.我已经研究这个问题太久了,我想不出解决办法.我的另一个 idea 是,这可以通过添加自定义json消毒器来实现吗?
如果您想要我的完整模型设计或我正在使用的单元测试,请告诉我.
unit test
[Fact]
public void Test1()
{
var postData = new Event() { Name = "EventName" };
postData.EventParameters.AddEventParameter("TestString", "test");
postData.EventParameters.AddEventParameter("testInt", 1);
postData.EventParameters.Items = new Dictionary<string, object>()
{
{ "test", 1 },
{ "test2", 1 },
{ "test3", "test" },
};
var data = new EventData()
{
ClientId = "test",
Events = new []
{
postData
}
};
var options = new JsonSerializerOptions { IgnoreNullValues = true };
var hold =JsonSerializer.Serialize(data);
// add breakpoint here
int i = 1;
}