Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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
C# C.Net 4.0+是否有任何JSON序列化程序可以将JSON序列化为Dictionary和dynamic[]_C#_.net_Json_C# 4.0_Dynamic - Fatal编程技术网

C# C.Net 4.0+是否有任何JSON序列化程序可以将JSON序列化为Dictionary和dynamic[]

C# C.Net 4.0+是否有任何JSON序列化程序可以将JSON序列化为Dictionary和dynamic[],c#,.net,json,c#-4.0,dynamic,C#,.net,Json,C# 4.0,Dynamic,我知道您可以将JSON序列化为Dictionary和object[],但问题是它需要您不断地在各个地方转换内容: using System.Web.Script.Serialization; var json = new JavaScriptSerializer { }.DeserializeObject(@"{array:['item1','item2']}") as Dictionary<string, object>; var strings = new List<st

我知道您可以将JSON序列化为Dictionary和object[],但问题是它需要您不断地在各个地方转换内容:

using System.Web.Script.Serialization;

var json = new JavaScriptSerializer { }.DeserializeObject(@"{array:['item1','item2']}") as Dictionary<string, object>;
var strings = new List<string> { };
if (json != null)
{
    var array = json["array"] as object[];
    if (array != null)
    {
        foreach (var item in array.Select(i=>i as string))
        {
            if (!string.IsNullOrWhiteSpace(item))
            {
                strings.Add(item);
            }
        }
    }
}
return strings.ToArray();
我宁愿做一些更像:

try
{
    var json = new JavaScriptSerializer { }.DeserializeDynamic(@"{array:['item1','item2']}") as Dictionary<string, dynamic>;
    var strings = new List<string>{};
    foreach (var item in json["array"])
        strings.Add(item as string);
    return strings.ToArray();
}
catch { return null; }
我遇到了对象[]和数字类型的问题,我不确定它是int、float、decimal还是double等。我无法清理json数据,因此它只能可靠地作为double

是否有任何用于.Net 4.0的JSON序列化程序输出字典和动态[]?对于使用json来说,这是一个更自然的选择,而字典和对象[…]。

就运行时而言,字典和字典是相同的类型

例如,这项工作:

var dynDic =new Dictionary<string,object>{ {"test", 1}}
                    as Dictionary<string,dynamic>;
int value = dynDic["test"];
不使用动态调用,因此无论项目变量是对象还是动态,它都会编译相同的内容。因此,如果您遇到问题,我猜是在使用动态

同样的规则适用于对象[]和动态[],它们是相同的类型,您可以在它们之间自由转换,当您转换时,您只是告诉编译器如何使用该数组中的对象

dynamic[] dynArr = new object[]{1};
因此,答案是任何将反序列化到Dictionary或object[]的内容都可以用作Dictionary或dynamic[]

var json = new JavaScriptSerializer { }
         .DeserializeDynamic(@"{array:['item1','item2']}")
         as Dictionary<string, dynamic>;
foreach (var item in json["array"])
    strings.Add(item as string);
dynamic[] dynArr = new object[]{1};