C#中的JSON代码有问题,无法获取变量[已关闭]

yrwegjxp  于 2023-08-08  发布在  C#
关注(0)|答案(1)|浏览(126)

已关闭。此问题需要details or clarity。它目前不接受回答。
**希望改进此问题?**通过editing this post添加详细信息并阐明问题。

1小时前关闭。
Improve this question
我尝试使用这个POS SDK的示例代码。代码来自销售消息示例,但甚至没有编译。
这段代码中正确的JSON代码是什么?

namespace bank
{
    class Program
    {
        static void Main(string[] args)
        {
            List<string> ports = POSIntegrado.Instance.ListPorts();
            string portName = "COM9";
            if (ports.Count > 0)
            {
                POSIntegrado.Instance.OpenPort(portName, 115200);
                int amount = 1;
                
                Task<SaleResponse> response = POSIntegrado.Instance.Sale(amount, ticket);

                string ticket = JsonConvert.SerializeObject( new       
                {
                    "Function" = 210,
    "Response"= "Aprobado",
    "Commerce Code"= 550062700310,
    "Terminal Id"= "ABC1234C",
    "Ticket"=  "AB123",
    "Authorization Code"  = "XZ123456",
    "Amount": 15000,
    "Shares Number", 3,
    "Shares Amount", 5000,
    "Last 4 Digits", 6677,
    "Operation Number", 60,
    "Card Type": "CR",
    "Accounting Date": "28/10/2019 22:35:12",
    "Account Number": "30000000",
    "Card Brand": "AX",
    "Real Date": "28/10/2019 22:35:12",
    "Employee Id": 1,
    "Tip": 1500
});

字符串
我花了三天时间,没有结果。什么是正确的JSON代码?这个例子由github https://github.com/TransbankDevelopers/transbank-pos-sdk-dotnet提供,我无法联系到开发人员。
只有错误缺失;:”

gopyfrb3

gopyfrb31#

这不是真实的代码,也没有存储在您提供的链接中。类似的内容在这个“详细SDK”页面中显示。这不是真正的代码。它是方法调用沿着它们假定的结果。这也是错误的。Task<T>并不是实际的API响应,它是一个承诺,将来会异步完成某些事情。C#属性名称中也不能有空格。
这个页面似乎包含了不完整的伪代码沿着序列化为JSON而不是C#符号的响应。你可以把它当作指南,但不能复制它。
您需要使用await来等待像Sale这样的异步操作,而不会阻塞执行线程。
下面的代码检查端口名是否在可用端口列表中,如果在,则打开它并调用Sale。一旦该方法返回,它将授权代码和整个响应打印为字符串。

static async Task Main(string[] args)
{
    var pos=POSIntegrado.Instance

    var ports = pos.ListPorts();
    string portName = "COM9";
    if (ports.Contains(portName))
    {
        int amount = 1;
        try
        {
            pos.OpenPort(portName, 115200);
           
            var response = await pos.Sale(amount, ticket);

            Console.WriteLine("Auth Code {0}", response.AuthorizationCode);
       
            var json=JsonConvert.SerializeObject(response);
            Console.WriteLine("Complete Response as text {0}",json);
        }
        finally
        {
            pos.ClosePort();
        }
    }
}

字符串
确保使用try/finally关闭串行端口,即使发生错误。

相关问题