首页 > 解决方案 > 使用接口反序列化松散类型的 json

问题描述

我有一个相当松散的 .json 文件,我想反序列化它。JSON 基本上是一个控制决策的条件列表。

{
  "or" : [
     "and" : [
       {
         "bool" : {
          "expected" : true,
          "actual" : false
         }
       }, 
      {
        "bool" : {
         "expected" : false,
         "actual" : false
        }
      }
     ]
.
.
.

这些类看起来像这样:

    public class BoolCondition : ICondition
    {
        private readonly bool _expected;
        private readonly bool _actual;

        public BoolCondition(bool expected, bool actual)
        {
            _expected = expected;
            _actual = actual;
        }

        public bool Eval()
        {
            return _expected.Equals(_actual);
        }
    }

    public class AndCondition : ICondition
    {
        public ICondition[] Conditions { get; set; }

        public AndCondition()
        {
        }

        public bool Eval()
        {
            return Conditions.All(c => c.Eval());
        }
    }

    public class OrCondition : ICondition
    {
        public ICondition[] Conditions { get; set; }

        public bool Eval()
        {
            return Conditions.Any(c => c.Eval());
        }
    }

有一个叫ICondition的接口,“or”、“and”、“bool”等条件都实现了这个接口。当然,这棵树中可以有任何结构。

有什么想法可以反序列化这个 JSON 吗?

标签: c#json.net

解决方案


推荐阅读