对于为此javascript代码创建json序列化数据的等价物是什么:
chartData.push({date: "bla",value1: "bla1",value2: "bla2"});
chartData.push({date: "blx",value2: "blax2"});
json看起来像这样:
[{
"date": bla,
"value1": bla1,
"value2": bla3,
}, {
"date": blx,
"value2": blax2
}]
我尝试创建一个类列表,但是当我不指定value1属性时,该值将只为零。但我不希望该属性在未分配的情况下显示在json中。
List <Models.HistoClass> HistoData= new List<Models.HistoClass>();
HistoData.Add(new Models.HistoClass {date="bla",value1="bla1",value2="bla3"});
HistoData.Add(new Models.HistoClass { date= "blx", value2="blax2" });
我应该如何创建数据模型以拥有类似的json?
谢谢!
答案 0 :(得分:2)
如果您以显示的方式手动创建数据,则可以使用匿名类型按照您想要的方式构建数据:
open -a Terminal.app /path/to/script.sh
但是,如果你想使用强类型和/或你的代码每次都以相同的方式初始化值,但有时值不存在,那么你可以使值可以为空并告诉JSON .NET在序列化时忽略null属性:
List <object> HistoData= new List<object>();
HistoData.Add(new {date="bla",value1="bla1",value2="bla3"});
HistoData.Add(new { date= "blx", value2="blax2" });
答案 1 :(得分:0)
您可以使用Json.NET的ShouldSerialize:
Public class DateAndValues
{
public DateTime Date {get; set;}
public Int32 Index {get; set;}
public Int32 Value1 {get; set;}
public Int16 Value2 {get; set;}
public bool ShouldSerializeValue1 ()
{
// your condition for serialization, for example even objects:
this.Index % 2 != 0;
}
}
此描述:
要有条件地序列化属性,请添加一个返回与该属性同名的布尔值的方法,然后使用ShouldSerialize作为方法名称的前缀。方法的结果确定属性是否已序列化。如果该方法返回true,则该属性将被序列化,如果它返回false,则将跳过该属性。
取自this link。
要实际序列化,当然要使用:
var firstObj = new DateAndValues { Index = 1, .. };
var secondObj = new DateAndValues { Index = 2, .. };
string json =
JsonConvert.SerializeObject(new[] {firstObj, secondObj}, Formatting.Indented);
根据上述条件,secondObj
(偶数索引)不会有Value1
。