Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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# 如何从json中的对象读取int数组(或任何数组)_C#_.net_Arrays_Json_Json.net - Fatal编程技术网

C# 如何从json中的对象读取int数组(或任何数组)

C# 如何从json中的对象读取int数组(或任何数组),c#,.net,arrays,json,json.net,C#,.net,Arrays,Json,Json.net,所以我在两个客户之间建立了工作沟通。为了发送数据,我使用json,当我发送单个值时,一切正常,但当我尝试发送整个数组时,我不知道如何在接收部分读取它们 Dictionary<string, object> data = new Dictionary<string, object>(); data.Add("string", "some string"); data.Add("int", 234); data.Add("bo

所以我在两个客户之间建立了工作沟通。为了发送数据,我使用json,当我发送单个值时,一切正常,但当我尝试发送整个数组时,我不知道如何在接收部分读取它们

    Dictionary<string, object> data = new Dictionary<string, object>();        

    data.Add("string", "some string");
    data.Add("int", 234);
    data.Add("bool", true);
    data.Add("intArray", new int[] { 1, 2, 3 });

    string jsonString = JsonConvert.SerializeObject(data);

    //sending data through internet as json string

    var newData = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonString);

    string myString = Convert.ToString(newData["string"]);
    int myInt = Convert.ToInt32(newData["int"]);
    bool myBool = Convert.ToBoolean(newData["bool"]);
    int[] myIntArray = (int[])newData["intArray"]; //doesn't work


    Debug.Log(myString);
    Debug.Log(myInt);
    Debug.Log(myBool);
    Debug.Log(myIntArray);
字典数据=新字典();
添加(“字符串”、“某些字符串”);
数据。添加(“int”,234);
数据。添加(“bool”,真);
添加(“intArray”,新的int[]{1,2,3});
字符串jsonString=JsonConvert.SerializeObject(数据);
//以json字符串形式通过internet发送数据
var newData=JsonConvert.DeserializeObject(jsonString);
string myString=Convert.ToString(newData[“string”]);
int myInt=Convert.ToInt32(newData[“int”]);
bool myBool=Convert.ToBoolean(newData[“bool”]);
int[]myIntArray=(int[])newData[“intArray”]//不起作用
Log(myString);
Debug.Log(myInt);
Debug.Log(myBool);
Debug.Log(myIntArray);

有人知道怎么做吗?

您可以使用JSON.Net方法
ToObject()

使用类

var myData=new JsonData{
MyString=“some string”,
MyInt=234,
MyBool=true,
MyIntArray=new[]{1,2,3}
};
字符串jsonString=JsonConvert.SerializeObject(myData);
//以json字符串形式通过internet发送数据
var newData=JsonConvert.DeserializeObject(jsonString);
Log(newData.MyString);
Log(newData.MyInt);
Log(newData.MyBool);
Log(newData.MyIntArray);

你用谷歌搜索过吗?是的,什么都找不到你是什么意思它看起来怎么样?序列化后的json字符串?我只使用Newtonsoft.Json提供的方法。没有实际的json文件保存在任何地方,我动态地写和读数据(如示例所示)考虑创建一个类,其中字典键是属性,而不是使用字典。这将使反序列化更容易。@Speedo看看我更新的答案。顺便说一句,关于类的使用,如果我在不同时间发送的数据结构很少(不像示例中那样只发送一个字符串、int、bool和int数组),该怎么办。我只是为每个结构创建类,还是有更复杂的解决方案?我个人喜欢类方法,这就是为什么我通常为通过JSON传输的每个结构创建类的原因。此外,在大多数情况下,结构不仅通过JSON传输一次,而且在应用程序生命周期中传输多次。因此,每个结构的类都绝对不是多余的。
var myIntArray = ((JArray) newData["intArray"]).ToObject<int[]>();
public class JsonData
{
    public string MyString {get;set;}
    public int MyInt {get;set;}
    public bool MyBool {get;set;}
    public int[] MyIntArray {get;set;}
}
var myData = new JsonData{
    MyString = "some string",
    MyInt = 234,
    MyBool = true,
    MyIntArray = new[] {1,2,3}
};

string jsonString = JsonConvert.SerializeObject(myData);

//sending data through internet as json string

var newData = JsonConvert.DeserializeObject<JsonData>(jsonString);

Debug.Log(newData.MyString);
Debug.Log(newData.MyInt);
Debug.Log(newData.MyBool);
Debug.Log(newData.MyIntArray);