繁体   English   中英

如何使用 Csharp 将字符串转换为预期格式的 Json 字符串

[英]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 格式。

您可以使用JsonConvert.DeserializeObject

尝试这个

    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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM