从 SpecFlow 表中序列化 JSON
Posted
技术标签:
【中文标题】从 SpecFlow 表中序列化 JSON【英文标题】:Serializing JSON from SpecFlow table 【发布时间】:2022-01-12 01:58:54 【问题描述】:我有一个与 specflow 表中的 JSON 序列化有关的问题。 我在规范流功能文件中有以下步骤:
当用户使用数据发起交易时:
| Key | Value |
| --------------|---------------------|
|Merchant | TestMerchant |
|Shop | TestShop |
|Currency | USD |
|Amount | 10.00 |
|User.ID | Test_User_01 |
|User.FirstName | Test_User_FirstName|
|User.LastName | Test_User_LastName |
我有两个模型,如下所示:
class User
public string ID get; set;
public string FirstName get; set;
public string LastName get; set;
class TransactionReq
public string Merchant get; set;
public string Shop get; set;
public string Currency get; set;
public decimal Amount get; set;
public User User get; set; //<--
[When(@"用户使用数据发起交易:")]
public void UserInitiatesTransaction(Table table)
var transactionData = table.CreateInstance<TransactionReq>();
//this is part of the code in the step
在步骤定义中,我使用辅助助手方法从表中获取数据,显然辅助助手没有感觉并且不映射用户数据。我想将数据序列化为 JSON,如下所示。
"Merchant":"TestMerchant",
"Shop":"TestShop",
"Amount":10.00,
"Currency":"EUR",
"User":
"Id":"Test_User_01",
"FirstName":"Test_User_FirstName",
"LastName":"Test_User_LastName",
您能否给我一些方法建议,Newtonsoft 是否包含用于从表或字典序列化为 json 的资源,具有像我上面描述的表结构?
【问题讨论】:
【参考方案1】:你可以试试这个代码
using Newtonsoft.Json;
var transactionData = table.CreateInstance<TransactionReq>();
var json = JsonConvert.SerializeObject(transactionData);
在 Visual Studio 中测试过,这是结果
"Merchant": "TestMerchant",
"Shop": "TestShop",
"Currency": "USD",
"Amount": 10.00,
"User":
"ID": "Test_User_01",
"FirstName": "Test_User_FirstName",
"LastName": "Test_User_LastName"
【讨论】:
是的,这正是我上面描述的内容,但不能按照您建议的方式工作。以上是关于从 SpecFlow 表中序列化 JSON的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 中反序列化 JSON 文件时出错
反序列化 JSON 会在表中创建另一个属性并且无法正确返回数据