解决 带数组的嵌套类,第2部分

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
跳伞运动员,这是继 我以前的查询, I'm现在尝试处理包含10次Employee福彩12选5走势图的响应。一世'm having some challenges bridging the COBOL world where Records and Fields map an area of memory, and the .NET world of reference and value classes. How do I get data into the array class JZ_Employee?

Response类的定义如下:-
C#:
namespace MyJSv
{
    public class 响应JSPG2A
    {
        public class JSPG2AResponse_
        {
            public class OJSPG2A_
            {
...
                public int JZ_Employee_BrowseCount { get; set; }
                // and more scalar classes,
                public class JZ_Employee_
                {
                    public string JZ_Employee_NthReturnCode { get; set; }
                    public string EMPNO { get; set; }
                    // and more classes within the Employee record
                }
                public JZ_Employee_[] JZ_Employee { get; } = new JZ_Employee_[10];
            }
            public OJSPG2A_ OJSPG2A { get; } = new OJSPG2A_ ();
        }
        public JSPG2AResponse_ JSPG2AResponse { get; } = new JSPG2AResponse_ ();
    }
}

这样做的目的是,在一个请求/响应中返回福彩12选5走势图块将更快得多,并且仅在需要下一个块时才返回服务。但是,第一个测试通过其1ry键读取Employee,并且应该仅返回一个福彩12选5走势图和9"empty" JSON records.

A ReadyAPI test reading Employee by its 1ry key shows that 10 occurrences of JZ-Employee are returned, with data in the first and 空的 JSON in the rest. 这个 is correct. Next step: handle this with my own code.

使用相同的测试参数,方法JSPG2AClient.ReqestRespond将请求发送到服务,该服务通过以下代码进行响应:-
C#:
                if (response.IsSuccessStatusCode)
                {
                    Response = JsonConvert.DeserializeObject<ResponseJSPG2A>(result);
                    AssignResponseToProperties(true);
                    return true;
                }

在尝试分配数组值的第一条语句上,AssignResponseToProperty失败:-
C#:
        _JZ_Employee_NthReturnCode = Response.JSPG2AResponse.OJSPG2A.JZ_Employee[EmployeeSub].JZ_Employee_NthReturnCode;

调试显示,尽管标量类都具有值,但数组类都为null

Snap1.jpg


响应是由上面的语句创建的
C#:
Response = JsonConvert.DeserializeObject<ResponseJSPG2A>(result);

Result is properly-formed JSON, containing 10 occurrences of JZ_Employee with data in the first and 空的 JSON in the rest. Exactly as I had expected. I saved and displayed the JSON, it shows
JSON:
{
  "JSPG2AResponse": {
    "OJSPG2A": {
...
      "JZ_Employee_BrowseCount": 0,
     // more scalar fields
      "JZ_Employee": [
        {
          "JZ_Employee_NthReturnCode": "U",
          "EMPNO": "000060",
          // other fields of first Employee
        },
        {
          "JZ_Employee_NthReturnCode": "",
          "EMPNO": "000000",
...       // rest of initialized fields
        },
        //  Another 8 空的 occurrences
      ]
    }
  }
}

这个 StackOverflow文章 建议我需要使用<List<JZ_Employee_>>反序列化数组类,但这当然只是其中的一部分<ResponseJSPG2A> and so of course <List<ResponseJSPG2A>>无效。救命。

谢谢罗伯特。
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
堆栈溢出 现在向我展示了如何解决此问题。 JZ-Employee的获取器从更改为
C#:
                public JZ_Employee_[] JZ_Employee { get; } = new JZ_Employee_[10];

C#:
                public 清单<JZ_Employee_> JZ_Employee { get; private set; } = new 清单<JZ_Employee_>();
为了使其有效,这需要
C#:
using System.Collections.Generic;

一切都非常简单,现在已经向我展示了如何做 :)
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
您只需:
C#:
public 清单<JZ_Employee_> JZ_Employee { get; } = new 清单<JZ_Employee_>();
If you are only ever going 至 create the list once per instance during construction. If you will be dynamically replacing the list after construction, then the private set will be useful 至 show others reading your code that you intend 至 replace the list later.
 

罗伯特·NZ

活跃的成员
已加入
2020年6月26日
留言内容
34
编程经验
Beginner
谢谢 @跳伞,在开发接口逻辑时会牢记这一点。这是一条很有用的注释,因为它使我以一种新的方式来思考程序。

在我的测试数据中,SQL查询WorkDept ="D11"返回17条福彩12选5走势图每个请求/响应都需要一秒钟左右的时间,因此查看WorkDept =中的所有福彩12选5走势图是一个缓慢的过程"D11"反过来,如果您必须为每个福彩12选5走势图使用请求/响应,就像在我的第一个程序(JSPG2)中那样。当前的实验希望一次返回几条福彩12选5走势图,因此,一旦获得一堆福彩12选5走势图,我就可以简单地通过设置数组索引来前后滚动。每个请求/响应都会完全重新生成C#数组,因此当理论上可以返回的最大福彩12选5走势图数为(17)时,两种解决方案都可以<= COBOL Web服务允许的最大福彩12选5走势图数。

但是我不能保证会一直如此,因此我必须开发一种逻辑,该逻辑可能只是在已返回的一堆福彩12选5走势图中设置数组索引,或者可能需要另一个请求/响应。我需要一种允许我添加到列表中的方法,因此私有集听起来很有用。谢谢你的建议。
 
最佳 底部