如何从原始字符串构造有效的json字符串

时间:2017-02-20 07:37:33

标签: c# asp.net json

以下是我的DTO。

public class CustomerTO
{
  public int CustomerId { get; set;}
  public string CustName { get; set;}
  public string CustJson { get; set;}
}

以下是我的LINQ以获取客户记录。

var query = (from c in entities.tblCustomers
             select c).toList<CustomerTO>();

这将返回客户集合&amp;在UI中,我将集合视为。

样品: -

    {  
    "CustomerId":113,
    "CustName":"Ram",
    "CustJson":""{\r\n  \"Number\": 143,\r\n  \"IsDeleted\": false,\r\n  \"GapAnalysisChecked\": false,\r\n  \"ShowGraphics\": true,\r\n  \"Impact\": {\r\n    \"Value\": \"DefaultNodeTitle_Impact\",\r\n    \"Details\": null,\r\n    \"DefaultValue\": \"DefaultNodeTitle_Impact\"}
   }

我需要在CustJson varialble中获得一个有效的json字符串。

  

请注意,在db中,CustJSON列中存储的数据是a   有效的json字符串。

所以我试过了。

foreach(var cust in customers)
{
   if(cust.CustJson != null)
   {
     var parsedJson = JsonConvert.DeserializeObject(cust.CustJson); // this give a valid json
    cust.CustJson  = JsonConvert.SerializeObject(parsedJson);// but this creates a string with \r\n
   }
}

当我尝试这个时,在解析JSON中我得到了所需的JSON。但是,当Serialize解析后的JSON再次返回相同的字符串时。

如何在Cust.Json中获取有效的json字符串?

有没有更好的方法来获取没有foreach循环的有效json?

1 个答案:

答案 0 :(得分:0)

嗯,我想我遇到了你的问题。您希望在序列化CustomerTO时将存储在CustJson列中的JSON包含到生成的json中。现在这个JSON正在被序列化程序转义,因为序列化程序并不知道这是有效的json。

你现在正在做的是将json反序列化为一个dynmaic对象,然后将它序列化为json字符串到同一个属性中。当然,这对序列化整个对象没有影响,因为json只会被再次转义。

你可能希望稍微强调动态的魔力:)

var listWithDeserializedProperty = customers.Select(c => 
{
    dynamic cust = new System.Dynamic.ExpandoObject();
    cust.CustomerId = c.CustomerId;
    cust.CustName = c.CustName;
    if (!string.IsNullOrWitheSpace(c.CustJson))
        cust.CustJson = JsonConvert.DeserializeObject(c.CustJson);
    return cust;
});

return JsonConvert.SerializeObject(listWithDeserializedProperty);

如果您现在序列化此对象,CustJson将被检测为一个对象,并将作为一个整体包含在生成的json中,而不会再次进行转义。当然,您也可以为此编写强类型视图模型,但为了简单起见......