如何根据json内容将json字符串反序列化为对象?

时间:2018-09-21 06:44:44

标签: c# json

如何将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字符串,我要相反。

我不想使用动态类型,因为映射到实体会更复杂。

这怎么办?

谢谢您的帮助。

0 个答案:

没有答案
相关问题