[英]How to convert a string to Json string in expected format using Csharp
我的输入字符串如下:
inputstring= "[\n{\n\"Synonyms\": \"\\\"hm\\\",\\\"history matching\\\",\\\"HM\\\",\\\"History Matching\\\"\"\n },\n{\n \"Synonyms\": \"\\\"risk taking\\\",\\\"Risk Taking\\\",\\\"RISK TAKING\\\",\\\"risk-taking\\\",\\\"Risk-Taking\\\",\\\"RISK-TAKING\\\"\"\n }\n]"
我需要创建一个函数来生成 JSON 字符串,如下所示。
预期输出 JSON 如下:
{
"wordAlterations": [
{
"alterations": [
"hm",
"history matching",
"HM",
"History Matching"
]
},
{
"alterations": [
"risk taking",
"Risk Taking",
"RISK TAKING",
"risk-taking",
"Risk-Taking",
"RISK-TAKING"
]
}
]
}
这是我尝试过的,但没有按预期工作。
[Fact]
public void InputStrToWordAlterationsTest2()
{
string alterations = "[\n {\n \"Synonyms\": \"\\\"hm\\\",\\\"history matching\\\",\\\"HM\\\",\\\"History Matching\\\"\"\n },\n {\n \"Synonyms\": \"\\\"genopt\\\",\\\"genOpt\\\",\\\"generic optimization\\\",\\\"Generic Optimization\\\"\"\n }\n]";
JArray jsonArray = JArray.Parse(alterations);
var WordAlterations = new List<WordAlterationsDTO>(jsonArray.Count);
var alterationsList2 = new List<AlterationsDTO>();
var dto = new WordAlterationsDTO(alterationsList2);
for (int i = 0; i <= jsonArray.Count - 1; i++)
{
WordAlterations.Add(dto);
}
string actual = JsonConvert.SerializeObject(dto); //"{\"wordAlterations\":[]}"
string expected = "{ 'wordAlterations': [ { 'alterations': [ 'hm','history matching', 'HM', 'History Matching' ] }, { 'alterations': [ 'risk taking', 'Risk Taking', 'RISK TAKING','risk - taking', 'Risk - Taking', 'RISK - TAKING' ] } ]}";
Assert.Same(expected, actual);
}
这是我使用的模型类。
public class AlterationsDTO
{
public AlterationsDTO();
public AlterationsDTO(IList<string> alterations);
[JsonProperty(PropertyName = "alterations")]
public IList<string> Alterations { get; set; }
public virtual void Validate();
}
public class WordAlterationsDTO
{
public WordAlterationsDTO();
public WordAlterationsDTO(IList<AlterationsDTO> wordAlterations);
[JsonProperty(PropertyName = "wordAlterations")]
public IList<AlterationsDTO> WordAlterations { get; set; }
public virtual void Validate();
}
使用上面的代码,我将输入的 JSON 字符串转换为预期格式的格式。
首先,您的输入字符串不是有效的 JSON 格式。
尝试这个
var jsonOrig="[\n{\n\"Synonyms\": \"\\\"hm\\\",\\\"history matching\\\",\\\"HM\\\",\\\"History Matching\\\"\"\n },\n{\n \"Synonyms\": \"\\\"risk taking\\\",\\\"Risk Taking\\\",\\\"RISK TAKING\\\",\\\"risk-taking\\\",\\\"Risk-Taking\\\",\\\"RISK-TAKING\\\"\"\n }\n]";
var json =jsonOrig.Replace("\\\"","");
var jsonDeserialized=JsonConvert.DeserializeObject<Root[]>(json);
var wordAlterations = new WordAlterations { wordAlterations= new List<WordAlteration>() };
foreach (var element in jsonDeserialized)
wordAlterations.wordAlterations.Add(new WordAlteration { alterations = element.Synonyms.Split(",").ToList()});
测试
json=JsonConvert.SerializeObject(wordAlterations,Newtonsoft.Json.Formatting.Indented);
输出
{
"wordAlterations": [
{
"alterations": [
"hm",
"history matching",
"HM",
"History Matching"
]
},
{
"alterations": [
"risk taking",
"Risk Taking",
"RISK TAKING",
"risk-taking",
"Risk-Taking",
"RISK-TAKING"
]
}
]
}
班级
public class WordAlterations
{
public List<WordAlteration> wordAlterations { get; set; }
}
public class WordAlteration
{
public List<string> alterations { get; set; }
}
public class Root
{
public string Synonyms { get; set; }
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.