Javascript 序列化json的c#等价物
为该javascript代码创建json序列化数据的等效方法是什么:Javascript 序列化json的c#等价物,javascript,c#,json,Javascript,C#,Json,为该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
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" });
List histordata=new List();
添加(newmodels.HistoClass{date=“bla”,value1=“bla1”,value2=“bla3”});
添加(newmodels.HistoClass{date=“blx”,value2=“blax2”});
我应该如何创建数据模型以获得这样的json
谢谢 如果您以显示的方式手动创建数据,则可以使用匿名类型来构建数据,使其看起来完全符合您的需要:
List <object> HistoData= new List<object>();
HistoData.Add(new {date="bla",value1="bla1",value2="bla3"});
HistoData.Add(new { date= "blx", value2="blax2" });
List histordata=new List();
添加(新的{date=“bla”,value1=“bla1”,value2=“bla3”});
添加(新的{date=“blx”,value2=“blax2”});
但是,如果您希望使用强类型和/或您的代码每次都以相同的方式初始化值,但有时值并不存在,那么您可以将值设置为null,并告诉JSON.NET在序列化时忽略null属性:
public class HistoClass
{
public string date;
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
public int? value1;
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
public int? value2;
}
...
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" });
公共类历史类
{
公共字符串日期;
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
公共国际价值1;
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
公共价值2;
}
...
List HistoData=新列表();
添加(newmodels.HistoClass{date=“bla”,value1=“bla1”,value2=“bla3”});
添加(newmodels.HistoClass{date=“blx”,value2=“blax2”});
您可以使用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,则将跳过该属性
这是从
当然,要实际序列化,请使用:
var firstObj = new DateAndValues { Index = 1, .. };
var secondObj = new DateAndValues { Index = 2, .. };
string json =
JsonConvert.SerializeObject(new[] {firstObj, secondObj}, Formatting.Indented);
根据上述条件,
secondObj
(偶数索引)将不会有Value1
也许这有助于访问此链接以验证json它不是有效的格式,方法是“我尝试创建类列表,但当我不分配Value1属性时,值将为零。”对于不可为null的属性,在初始化期间输入值时将设置其默认值。尝试使用int?或者可以为null,然后像if(value1.HasValue){/*使用value1.Value*/}@Raunts访问它:很高兴听到这个消息。一定要标记所回答的问题,这样其他人就不会认为你还需要帮助。