C# 如何在使用DataContractJsonSerializer时从字典或KeyValuePair中删除键/值
在其他帖子中看到了一些想法,但无法摆脱json字符串中的键值文本。 有一系列内置代码的选项可以传递给FLOT javascript绘图应用程序。 字典类型的项目,给了我一个问题 使用.Net 4.0,因此没有更新的DataContractJsonSerializerC# 如何在使用DataContractJsonSerializer时从字典或KeyValuePair中删除键/值,c#,keyvaluepair,datacontractjsonserializer,C#,Keyvaluepair,Datacontractjsonserializer,在其他帖子中看到了一些想法,但无法摆脱json字符串中的键值文本。 有一系列内置代码的选项可以传递给FLOT javascript绘图应用程序。 字典类型的项目,给了我一个问题 使用.Net 4.0,因此没有更新的DataContractJsonSerializer [DataContract] public class MyOptions { [DataMember(Name = "data", EmitDefaultValue = false)] public List&l
[DataContract]
public class MyOptions
{
[DataMember(Name = "data", EmitDefaultValue = false)]
public List<KeyValuePair<string, string>> SeriesData { get; set; }
}
private List<KeyValuePair<string, string>> _data = new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DataKvp
{
get { return _data;}
set { _data = value; }
}
private String[][] _dataArray;
[DataMember(Name = "data", EmitDefaultValue = false)]
public String[][] DataArray
{
get
{
_dataArray = new string[_data.Count][];
var i = 0;
for (var index = 0; index < _data.Count; index++)
{
var pair = _data[index];
_dataArray[i] = new[] { pair.Key, pair.Value };
i++;
}
return _dataArray;
}
}
[DataContract]
公共类选项
{
[DataMember(Name=“data”,EmitDefaultValue=false)]
公共列表序列数据{get;set;}
}
输出示例:
{“数据”:[{“键”:“ooo1”,“值”:“ppp1”},{“键”:“ooo2”,“值”:“ppp2”},{“键”:“o”
oo3,“值”:“ppp3”}]}
我需要什么
{“数据”:[[“ooo1”,“ppp1”],[“ooo2”,“ppp2”],[“ooo3”,“ppp3”]}
找到了使用DataContractJsonSerializer的解决方案
[DataContract]
public class MyOptions
{
[DataMember(Name = "data", EmitDefaultValue = false)]
public List<KeyValuePair<string, string>> SeriesData { get; set; }
}
private List<KeyValuePair<string, string>> _data = new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DataKvp
{
get { return _data;}
set { _data = value; }
}
private String[][] _dataArray;
[DataMember(Name = "data", EmitDefaultValue = false)]
public String[][] DataArray
{
get
{
_dataArray = new string[_data.Count][];
var i = 0;
for (var index = 0; index < _data.Count; index++)
{
var pair = _data[index];
_dataArray[i] = new[] { pair.Key, pair.Value };
i++;
}
return _dataArray;
}
}
使用锯齿状数组。字符串[]不是字符串[,](这将不会序列化)
因此,在构建选项时,我可以轻松地使用KeyValau对,并且仍然能够使用DataContractJsonSerializer
[DataContract]
public class MyOptions
{
[DataMember(Name = "data", EmitDefaultValue = false)]
public List<KeyValuePair<string, string>> SeriesData { get; set; }
}
private List<KeyValuePair<string, string>> _data = new List<KeyValuePair<string, string>>();
public List<KeyValuePair<string, string>> DataKvp
{
get { return _data;}
set { _data = value; }
}
private String[][] _dataArray;
[DataMember(Name = "data", EmitDefaultValue = false)]
public String[][] DataArray
{
get
{
_dataArray = new string[_data.Count][];
var i = 0;
for (var index = 0; index < _data.Count; index++)
{
var pair = _data[index];
_dataArray[i] = new[] { pair.Key, pair.Value };
i++;
}
return _dataArray;
}
}
private List_data=new List();
公共列表数据KVP
{
获取{return_data;}
设置{u data=value;}
}
私有字符串[][]\u数据数组;
[DataMember(Name=“data”,EmitDefaultValue=false)]
公共字符串[][]数据数组
{
得到
{
_dataArray=新字符串[_data.Count][];
var i=0;
对于(var index=0;index<\u data.Count;index++)
{
var对=_数据[索引];
_dataArray[i]=new[]{pair.Key,pair.Value};
i++;
}
返回数据数组;
}
}
所以现在我还可以用
test.DataKvp = new List<KeyValuePair<string, string>>();
test.DataKvp.Add(new KeyValuePair<string, string>("ooo1", "ppp1"));
test.DataKvp.Add(new KeyValuePair<string, string>("ooo2", "ppp2"));
test.DataKvp.Add(new KeyValuePair<string, string>("ooo3", "ppp3"));
test.DataKvp=newlist();
test.DataKvp.Add(新的KeyValuePair(“ooo1”、“ppp1”);
test.DataKvp.Add(新的键值对(“ooo2”、“ppp2”);
test.DataKvp.Add(新的键值对(“ooo3”、“ppp3”);
序列化程序将使用锯齿数组,并为我进行转换。您必须使用List吗?是否要使用Dictionary或KeyValuePair。只是为了便于构建所有特定选项。我可以从一个锯齿状数组开始,不想弄乱init数组的东西。很多循环正在进行。