我从WS收到一个JSon字符串。它已经很久了,我无法使用Json2charp来解析它并接收结构化类。
我想用命令解析字符串。怎么可能?
我不懂课程所以我不能使用如下命令:
Dim result = JsonConvert.DeserializeObject(Of MyClass.RootObject)(String_From_File)
是否可以从字符串中获取不使用json2charp站点的类? 例如,在vs.net中,如果在变量' string_from_file'我选择了Json Visualizer'并以正确的模式查看所有类和数据。
如何在我的代码中获得相同的内容?
我已经安装了Newtonsoft.json
答案 0 :(得分:0)
如果你不能使用json来像NewtonSoft.Json这样的类映射器。您可以使用Windows.Data.Json api。它允许您从JSON字符串中解析和提取所需的数据。
JsonValue jsonValue = JsonValue.Parse("{\"Width\": 800, \"Height\": 600, \"Title\": \"View from 15th Floor\", \"IDs\": [116, 943, 234, 38793]}");
double width = jsonValue.GetObject().GetNamedNumber("Width");
double height = jsonValue.GetObject().GetNamedNumber("Height");
string title = jsonValue.GetObject().GetNamedString("Title");
JsonArray ids = jsonValue.GetObject().GetNamedArray("IDs");
您可以在Windows Universal Sample GitHub中找到示例。
显示复杂对象解析here。我在这里提取了最相关的部分。 JSON字符串提供给User
构造函数,该构造函数提取它所需的内容,然后将解析委托给嵌套的School
构造函数。
{
"id": "1146217767",
"phone": null,
"name": "Satya Nadella",
"education": [
{
"school": {
"id": "204165836287254",
"name": "Contoso High School"
},
"type": "High School"
},
{
"school": {
"id": "116138758396662",
"name": "Contoso University"
},
"type": "College"
}
],
"timezone": -8,
"verified": true
}
使用以下代码解析此JSON片段:
public User(string jsonString) : this()
{
JsonObject jsonObject = JsonObject.Parse(jsonString);
Id = jsonObject.GetNamedString(idKey, "");
IJsonValue phoneJsonValue = jsonObject.GetNamedValue(phoneKey);
if (phoneJsonValue.ValueType == JsonValueType.Null)
{
Phone = null;
}
else
{
Phone = phoneJsonValue.GetString();
}
Name = jsonObject.GetNamedString(nameKey, "");
Timezone = jsonObject.GetNamedNumber(timezoneKey, 0);
Verified = jsonObject.GetNamedBoolean(verifiedKey, false);
foreach (IJsonValue jsonValue in jsonObject.GetNamedArray(educationKey, new JsonArray()))
{
if (jsonValue.ValueType == JsonValueType.Object)
{
Education.Add(new School(jsonValue.GetObject()));
}
}
}
public School(JsonObject jsonObject)
{
JsonObject schoolObject = jsonObject.GetNamedObject(schoolKey, null);
if (schoolObject != null)
{
Id = schoolObject.GetNamedString(idKey, "");
Name = schoolObject.GetNamedString(nameKey, "");
}
Type = jsonObject.GetNamedString(typeKey);
}
如果您不能使用NewtonSoft.Json的自动映射,除了自己动手之外别无他法。
答案 1 :(得分:-1)
不是那么简单。
我收到的Json非常复杂并且有很多课程
所以我不能使用
double width = jsonValue.GetObject()。GetNamedNumber(“Width”);