繁体   English   中英

使用 C# object 创建复杂 JSON

[英]Create complex JSON using C# object

我正在尝试从包含数据的 c# object 创建 json。 数据采用简单表格格式。 由列组成:名称、InputCode、DisplayID、CodeID、ParentID。 如果 Parent(Net) 则 ParentID 为 null。 如果 Children(Subnet),则 ParentID 包含 Parent(Net) 的 CodeID。 CodeID 是唯一的。 我正面临使用 foreach 在子网下迭代的问题。 它不允许。

public class CodeFrameJson
    {
        public string Name { get; set; }
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public int? InputCodeValue { get; set; }
        public int DisplayId { get; set; }
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public List<CodeFrameJson> Subnet { get; set; }
    }
List<CodeFrameJson> cfj = new List<CodeFrameJson>();
            IEnumerable<CodeDTO> _cfd = new List<CodeDTO>();
            _cfd = codeFrameJson.GetCodeFrame(questionId, projectName);
            _cfd = _cfd.OrderBy(a => a.DisplayOrderNo).ToList();
            foreach (var a in _cfd)
            {
                int CodesID = 0;
                CodeFrameJson obj = new CodeFrameJson();
                if (a.InputCodeValue == null)
                {
                    var root = new CodeFrameJson()
                    {
                        Name = a.CodeName,
                        DisplayId = a.DisplayOrderNo,
                        InputCodeValue = null,
                        Subnet = new List<CodeFrameJson>()
                        {
                            //Start: Not allowing foreach
                            foreach (var x in _cfd)
                            {
                                if (x.ParentId == CodesID)
                                {
                                    new CodeFrameJson()
                                    {
                                        Name = x.CodeName,
                                        InputCodeValue = x.InputCodeValue,
                                        DisplayId = x.DisplayOrderNo
                                    };
                                }
                            }
                    //End: Not allowing foreach
                }
            };
                    obj = root;
                }
                else {
                    var root = new CodeFrameJson()
                    {
                        Name = a.CodeName,
                        DisplayId = a.DisplayOrderNo,
                        InputCodeValue = a.InputCodeValue,
                        Subnet = null
                    };
                    obj = root;
                }
                cfj.Add(obj);
            }
            var json = JsonConvert.SerializeObject(cfj, Formatting.Indented);

最终 Output 这样的东西很容易区分

{
  "Site": {
    "Name": "Site",
    "DisplayID": 1,
    "Subnet": [
      {
        "Name": "Full Site",
        "InputCodeValue": 1,
        "DisplayId": 2
      },
      {
        "Name": "Partial Site",
        "InputCodeValue": 2,
        "DisplayId": 3
      }
    ]
  },
  "Test": {
    "Name": "Test1",
    "InputCodeValue": 3,
    "DisplayId": 4
  }
}

这实际上与 JSON 无关,但与 object(集合)初始化无关。 您只能在那里分配值,但 LinQ 来救援:

只需过滤您的列表并在 select 语句中创建新对象:

Subnet = _cfd.Where(x => x.ParentId == CodesID).Select(x => new CodeFrameJson
{
    Name = x.CodeName,
    InputCodeValue = x.InputCodeValue,
    DisplayId = x.DisplayOrderNo
}).ToList()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM