以下是我的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?
答案 0 :(得分:0)
你现在正在做的是将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中,而不会再次进行转义。当然,您也可以为此编写强类型视图模型,但为了简单起见......