C# 如何从json中的对象读取int数组(或任何数组)
所以我在两个客户之间建立了工作沟通。为了发送数据,我使用json,当我发送单个值时,一切正常,但当我尝试发送整个数组时,我不知道如何在接收部分读取它们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
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);