如何将json字符串反序列化为对象取决于json内容? 我想用 Newtonsoft.Json 做到这一点,因为我在整个项目中都使用了它,而且使用起来很简单。
让我通过示例进行说明: 我有json字符串,它必须是不同的属性对象。内容取决于生成json文件的工具,我无法根据文件名或类似内容来预测内容。
例如,我可以拥有json文件:
ul.timeline {
list-style-type: none;
position: relative
}
ul.timeline:before {
content: '';
background: #d4d9df;
display: inline-block;
position: absolute;
left: 29px;
width: 2px;
height: 100%;
z-index: 400
}
ul.timeline > li {
margin-bottom: 10px 0;
padding-left: 10px
}
ul.timeline > li:not(:last-child):after {
content: '';
background: white;
display: inline-block;
position: absolute;
border-radius: 50%;
border: 2px solid #22c0e8;
left: 20px;
width: 20px;
height: 20px;
z-index: 400
}
或者我可以有这样的东西:
{
"FileCreationDate":"29-08-2018 14:56:30",
"MessageType":2,
"Messages":[
{
"MessageSequenceNumber":1,
"ModalType":5,
"Message":{
"TransactionValue":5,
"ProductAmount":5
}
}
]
}
您可以看到消息列表中两个json字符串具有相同的属性消息对象。 我想反序列化此数据结构:
{
"FileCreationDate":"29-08-2018 14:56:30",
"MessageType":1,
"Messages":[
{
"MessageSequenceNumber":1,
"ModalType":5,
"Message":{
"TransactionBusinessDate":"29-08-2018 14:54:29",
"TransactionStatus":5,
"TicketNumber":5,
}
}
]
}
如果json字符串来自第一个示例,我想将消息对象反序列化为EventMessage属性,并且public class EventFileDto
{
public string FileCreationDate { get; set; }
public MessageType MessageType { get; set; }
public IEnumerable<MessageDetailsDto> Messages { get; set; }
}
public class MessageDetailsDto
{
public int MessageSequenceNumber { get; set; }
public int ModalType { get; set; }
public EventMessageDto EventMessage { get; set; }
public TransactionMessage TransactionMessage { get; set; }
}
属性应为null。
对于第二个json字符串,我要相反。
我不想使用动态类型,因为映射到实体会更复杂。
这怎么办?
谢谢您的帮助。