Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 序列化json的c#等价物_Javascript_C#_Json - Fatal编程技术网

Javascript 序列化json的c#等价物

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

为该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" });
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访问它:很高兴听到这个消息。一定要标记所回答的问题,这样其他人就不会认为你还需要帮助。