首页 > 解决方案 > C# 控制器确实省略了 XML 子元素的属性

问题描述

我的任务是调试一个相当大(且未记录)的 ASP.NET 项目,更具体地说,是一个端点控制器,如下所示(由我缩短和假名,但未修改):

namespace myAPI.Controllers
{
    public class MyViewController: BaseController
    {
        private myContext _db => ServiceLocator.Db;

        [ResponseType(typeof(IEnumerable<MyViewDto>))]
        public IHttpActionResult GetView(int? selectedEntityId)
        {
            var overallViews = inputPages[0].MyViews.ToList();
            for (int j = 1; j < inputPages.Count; j++)
            {
                var MyViewsTemp = inputPages[j].MyViews.
                    Where(x => x.Entity == selectedEntityId).ToList();
                MyViews.AddRange(MyViewsTemp);
            }

            var result = myViews.GroupBy(x => x.Position).
                Select(x => new MyViewDto
                {
                    Adjustments = x.Sum(y => y.Adjustments),
                    children = x.Select(Mapper.Map<MyViewDto>),  // <-- What exactly does this do?
                    PositionId = x.Key?.Id,
                    PositionName = x.Key?.Name,
                    Value = x.Sum(y => y.Value),
                    ValueAdjusted = x.Sum(y => y.ValueAdjusted),
                });
            return Ok(result);
        }
    }
}

正如预期的那样,端点提供了以下结构的嵌套 XML,但有时某些属性ValueAdjusted对于(第一级)子级是空的,我不明白。

预期行为:如果 childi是叶节点(=没有后续子节点),则ValueAdjusted = x.Sum(y => y.ValueAdjusted)应该只返回该inputPages[i].ValueAdjusted节点的 the ,还是这样?

工程示例:

<MyViewDto xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<MyViews>
  <MyViewDto>
    <Adjustments>45818816</Adjustments>
    <PositionId>10</PositionId>
    <PositionName>Big Brother Bank</PositionName>
    <Value>299792458.00</Value>
    <children>
      <RunoffViewDto>
        <Adjustments i:nil="true"/>
        <PositionId>10</PositionId>
        <PositionName>Big Brother Bank</PositionName>
        <SubPositionId>1</SubPositionId>
        <SubPositionName>Assets A</SubPositionName>
        <Value>19955366.62</Value>
        <ValueAdjusted i:nil="true"/>
        <children i:nil="true"/>
      </RunoffViewDto>
      <RunoffViewDto>
        <Adjustments i:nil="true"/>
        <PositionId>10</PositionId>
        <PositionName>Big Brother Bank</PositionName>
        <SubPositionId>2</SubPositionId>
        <SubPositionName>Assets B</SubPositionName>
        <Value>19955366.62</Value>
        <ValueAdjusted i:nil="true"/>
        <children i:nil="true"/>
      <RunoffViewDto>
    </MyViewDto>
</MyViews>

非常感谢任何帮助和解释!

标签: c#asp.netxmlentity-frameworklinq

解决方案


推荐阅读