c# - 将 JavaScript 对象解析为 C# 的问题
问题描述
我正在将包含对象值的 js 文件解析为 C# 对象。现在 - 我已经将 JS 代码转换为 JSON,然后尝试转换为 C# 对象。
我在想出如何在 C# 中生成对象时遇到问题。我尝试过多种尝试,主要是使用字典(Dictionary<string,[object])。我用谷歌搜索,在多个问题中访问了 SO,目前没有成功——我所有的想法都导致了空对象。
重要提示 - 我无法更改 JS 的来源,之后可以更改任何内容。
最新的对象理念:
public class SingleFarm
{
public List<string> Modules { get; set; }
public List<string> Servers { get; set; }
}
public class SingleEnv
{
public Dictionary<string, SingleFarm> Farms { get; set; }
}
public class FarmsModel
{
public Dictionary<string, SingleEnv> FarmsModel { get; set; }
}
解析代码:
var farmsText = File.ReadAllText(filePath);
//using Jurassic
var engine = new ScriptEngine();
var result = engine.Evaluate(farmsText);
var json = JSONObject.Stringify(engine, result);
var parsed = JsonConvert.DeserializeObject<FarmsModel>(json);
JS文件来源:
var environments = {};
environments['ENV1'] = {
"WWW": {
"Modules": [
"module21"
],
"Servers": [
"a-1"
]
}
};
environments['ENV2'] = {
"FARM1": {
"Modules": [
"module41"
],
"Servers": [
"s1",
"s2"
]
},
"FARM2": {
"Modules": [
"module11"
],
"Servers": [
""
]
},
"FARM3": {
"Modules": [
"module1"
],
"Servers": [
""
]
}
};
environments['ENV3'] = {
"FARM1": {
"Modules": [
"module10"
],
"Servers": [
"server1"
]
},
"FARM2": {
"Modules": [
"module22"
],
"Servers": [
""
]
},
"FARM3": {
"Modules": [
"module33"
],
"Servers": [
"server3"
]
}
};
JSON 如下所示:
{
"ENV1": {
"WWW": {
"Modules": [
"module21"
],
"Servers": [
"a-1"
]
}
},
"ENV2": {
"FARM1": {
"Modules": [
"module41"
],
"Servers": [
"s1",
"s2"
]
},
"FARM2": {
"Modules": [
"module11"
],
"Servers": [
""
]
},
"FARM3": {
"Modules": [
"module1"
],
"Servers": [
""
]
}
},
"ENV3": {
"FARM1": {
"Modules": [
"module10"
],
"Servers": [
"server1"
]
},
"FARM2": {
"Modules": [
"module22"
],
"Servers": [
""
]
},
"FARM3": {
"Modules": [
"module33"
],
"Servers": [
"server3"
]
}
}
}
你有什么想法?
解决方案
您不应该尝试将字典序列化为对象,因为它会尝试映射属性名称。
如果你使用
var parsed = JsonConvert.DeserializeObject<Dictionary<string, Dictionary<string, SingleFarm>>>(json);
它应该工作。小提琴
推荐阅读
- python - Python中对导数有约束的多项式的最小二乘逼近
- java - 如何在 Standalone Jetty 中为静态页面添加一些页脚注释 (msg):http://localhost:8080/jcg/
- e-commerce - 如何从 Magento 2 Checkout 中的报价中获得折扣
- node.js - 以异步方式在节点中使用加密随机字节
- flutter - 为什么我无法在我的 32 位 windows 10 机器上安装颤振?
- javascript - 选择一个号码
- dax - 有更快的平均值吗?
- r - 将 xml 文件解析为具有重复下标的 R 并给出重复的行?
- javascript - 是否可以使用 nodejs 直接写入 gcp 中托管的文件
- automationanywhere - 如何在对象克隆的情况下获取 chrome 中的文本?