C# 如何在使用DataContractJsonSerializer时从字典或KeyValuePair中删除键/值

C# 如何在使用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

在其他帖子中看到了一些想法,但无法摆脱json字符串中的键值文本。 有一系列内置代码的选项可以传递给FLOT javascript绘图应用程序。 字典类型的项目,给了我一个问题

使用.Net 4.0,因此没有更新的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;
            }

        }
[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数组的东西。很多循环正在进行。