JSON 序列化 - 如何取消属性值的引号
本文关键字:属性 取消 序列化 何取消 JSON | 更新日期: 2023-09-27 18:33:23
给定一个类 A ...
public class A {
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
string jsonString = JsonConvert.SerializeObject(
new A() {
Prop1 = "ABC",
Prop2 = "$.jqplot.DateAxisRenderer" }
);
jsonString 包含...'"{ "提案1":"ABC", ''"Prop2''":''"$.jqplot.日期轴渲染器''"}'";
问题:
如何取消报价 Prop2?
即我希望 jsonString 包含...'"{ "提案1":"ABC", ''"Prop2''":$.jqplot.DateAxisRenderer}'";
以便 Prop2 被评估(在客户端上(作为引用而不是字符串
如果要从 Prop2 中删除引号,可以为类型编写一个 JSON.NET JsonConverter
并将属性值输出为"raw"。
但是(这很重要(,您的输出将不再是有效的 JSON。
如果你对此混合解决方案感到满意,下面是一些示例代码(假设你已经在项目中引用了 JSON.NET(:
namespace JsonRawTest
{
public class AConverter : JsonConverter
{
public override bool CanRead { get { return false; } }
public override bool CanWrite { get { return true; } }
public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
A obj = value as A;
writer.WriteStartObject();
writer.WritePropertyName("Prop1");
writer.WriteValue(obj.Prop1);
writer.WritePropertyName("Prop2");
writer.WriteRawValue(obj.Prop2);
writer.WriteEndObject();
}
public override bool CanConvert(Type objectType)
{
return typeof(A).IsAssignableFrom(objectType);
}
}
public class A
{
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
class Program
{
static void Main(string[] args)
{
var a = new A
{
Prop1 = "Some first value",
Prop2 = "$.jqplot.DateAxisRenderer"
};
string json = JsonConvert.SerializeObject(a,
new JsonConverter[] { new AConverter() });
...
}
}
}
您可以将其作为字符串传递给客户端,然后使用 eval()
函数解析字符串,如下所示:
var str = "alert('hello')";
eval(str); //This will execute the alert method.
var str2 = "(function() { return true; })()";
var returned = eval(str2); //Holds value of true