这是我的JSON
文件。
{
"webroot": "wwwroot",
"version": "1.0.0-*",
"dependencies": {
"EntityFramework.SqlServer": "7.0.0-beta5",
"EntityFramework.Commands": "7.0.0-beta5",
"Microsoft.AspNet.Mvc": "6.0.0-beta5",
},
"exclude": [
"wwwroot",
"node_modules",
"bower_components"
],
}
我可以使用以下代码段将“webroot”的值读作字符串,将“exclude”作为数组读取。
string file = File.ReadAllText("project.json");
Product pro = JsonConvert.DeserializeObject<Product>(file);
但我无法读取依赖关系的价值。抛出异常为“Error reading string。意外的标记:StartObject。路径'依赖',......”
我的要求是读取依赖节点下的每个值并验证它。然后添加一个新值并将其写回json fie。请帮忙。
编辑: 我的产品类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Product
{
private string webroot;
private string[] exclude;
private string[] dependencies;
public string WebRoot
{
get
{
return webroot;
}
set
{
webroot = value;
}
}
public string[] Exclude
{
get
{
return exclude;
}
set
{
exclude = value;
}
}
public string[] Dependencies
{
get
{
return dependencies;
}
set
{
dependencies = value;
}
}
}
}
抛出异常:
无法反序列化当前的JSON对象(例如{“name”:“value”}) 到'System.String []'类型,因为该类型需要一个JSON数组 (例如[1,2,3])正确反序列化。
答案 0 :(得分:2)
要正确反序列化文件,您的类应如下所示。请注意body
的{{1}}属性。
JsonProperty
然后您可以使用Json.NET
直接反序列化它
using Newtonsoft.Json;
public class Product
{
public string webroot { get; set; }
public string version { get; set; }
public Dependencies dependencies { get; set; }
public string[] exclude { get; set; }
}
public class Dependencies
{
[JsonProperty("EntityFramework.SqlServer")]
public string EntityFrameworkSqlServer { get; set; }
[JsonProperty("EntityFramework.Commands")]
public string EntityFrameworkCommands { get; set; }
[JsonProperty("Microsoft.AspNet.Mvc")]
public string MicrosoftAspNetMvc { get; set; }
}
如果您只想阅读json的某些属性/部分,可以像这样使用Json.NET
string content = File.ReadAllText(@"C:\YourDirectory\product.json");
var product = JsonConvert.DeserializeObject<Product>(content);
答案 1 :(得分:2)
Dependencies
属性是具有动态属性的对象,因此您需要在C#类中使用某种动态对象。
使用Dictionary<string, string>
Dependencies
属性可以解决问题。这是一个例子:
public class Product
{
public string Webroot { get; set; }
public string Version { get; set; }
public Dictionary<string, string> Dependencies { get; set; }
public string[] Exclude { get; set; }
}
[ ... ]
static void Main()
{
string json = File.ReadAllText("project.json");
Product pro = JsonConvert.DeserializeObject<Product>(json);
foreach (var dependency in pro.Dependencies)
{
// Here you can validate each property instead of printing it ...
Console.WriteLine("{0}: {1}", dependency.Key, dependency.Value);
}
pro.Dependencies.Add("NewProperty", "NewValue");
var resultJson = JsonConvert.SerializeObject(pro, Formatting.Indented);
Console.WriteLine(resultJson);
}