我的json格式就像 -
JavaScriptSerializer ser = new JavaScriptSerializer();
nameList myNames = ser.Deserialize<nameList>(json);
我想在不使用json.net的情况下阅读翻译的文本值。 但它总是返回空值。
/**
* System configuration for Angular samples
* Adjust as necessary for your application needs.
*/
(function (global) {
System.config({
paths: {
// paths serve as alias
'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
// our app is within the app folder
app: 'app',
// angular bundles
'@angular/core': 'npm:@angular/core/bundles/core.umd.js',
'@angular/common': 'npm:@angular/common/bundles/common.umd.js',
'@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
'@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
'@angular/http': 'npm:@angular/http/bundles/http.umd.js',
'@angular/router': 'npm:@angular/router/bundles/router.umd.js',
'@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
'@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
// other libraries
'rxjs': 'npm:rxjs',
'angular-in-memory-web-api': 'npm:angular-in-memory-web-api/bundles/in-memory-web-api.umd.js',
'ag-grid-ng2': 'node_modules/ag-grid-ng2',
'ag-grid': 'node_modules/ag-grid',
'ag-grid-enterprise': 'node_modules/ag-grid-enterprise',
'@angular/material': 'npm:@angular/material/material.umd.js',
'angular2-cool-storage': 'npm:angular2-cool-storage',
'underscore': 'npm:underscore',
'moment': 'npm:moment',
'ng2-bootstrap': 'npm:ng2-bootstrap',
'@ng-idle/core': 'npm:@ng-idle/core/bundles/core.umd.js',
'@ng-idle/keepalive': 'npm:@ng-idle/keepalive/bundles/keepalive.umd.js',
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
app: { main: './main.js', defaultExtension: 'js' },
rxjs: { defaultExtension: 'js' },
'angular-in-memory-web-api': { main: './index.js', defaultExtension: 'js' },
lib: { format: 'register', defaultExtension: 'js' },
'ag-grid-ng2': { defaultExtension: "js" },
'ag-grid': { defaultExtension: "js" },
'angular2-cool-storage': { main: './cool-storage.js', defaultExtension: 'js' },
'underscore': { main: './underscore.js', defaultExtension: 'js' },
'moment': { main: './moment.js', defaultExtension: 'js' },
'ng2-bootstrap': { main: './ng2-bootstrap.js', defaultExtension: 'js' },
//'@ng-idle/core': { main: './idle.js', defaultExtension: 'js' },
//'@ng-idle/keepalive': { main: './keepalive.js', defaultExtension: 'js' },
map: {
'ag-grid-ng2': 'node_modules/ag-grid-ng2',
'ag-grid': 'node_modules/ag-grid'
}
}
});
})(this);
答案 0 :(得分:1)
public class nameList {public name [] Translator {get;组; }}
这是将Json映射到的不正确的类。
尝试使用这些类来反序列化Json,它将完美地运行:
public class Translation
{
public string translatedText { get; set; }
}
public class Data
{
public List<Translation> translations { get; set; }
}
public class nameList
{
public Data data { get; set; }
}
到达translatedText
属性的示例:
var text = myNames.data.translations[0].translatedText;
答案 1 :(得分:-1)
基于转换此JSON的nameList
类(来自注释)以及提供的示例JSON,返回值为null的原因归结为Deserialize
方法而不是能够映射到班级。
根据提供的信息,我重新创建了必要的课程。
class nameList {
public name[] Translator { get; set; }
}
class name {
public string TranslatedText { get; set; }
}
然后我尝试使用以下
将提供的JSON解析为这些类var serializer = new JavaScriptSerializer();
// The json data, in one line
string json = "{\"data\":{\"translations\":[{\"translatedText\": \"مرحبا\"}]}}";
// Convert back into object similar to described
nameList myNames = serializer.Deserialize<nameList>(json);
try {
// Attempt to access
Console.WriteLine(myNames.Translator[0]);
}
catch (Exception ex) {
Console.WriteLine("Fail:" + ex.Message);
}
执行时,以下内容输出到控制台。
Fail: Object reference not set to an instance of an object.
表示返回值为null。
如前所述,这是由于Deserialize
方法无法映射到类。 (虽然奇怪的是InvalidOperationException
没有触发)所以让我们通过转换nameList
的实例来看看可以映射什么JSON。
// Manually created object
nameList myNames = new nameList() {
Translator = new name[] {
new name() { TranslatedText = "مرحبا" }
}
};
// Convert to JSON
string json = serializer.Serialize(myNames);
Console.WriteLine("JSON:\n" + json);
执行时,输出以下内容。
JSON:
{"Translator":[{"TranslatedText":"?????"}]}
除了VSCode调试控制台不支持该语言这一显而易见的事实外,我们还面临着一些非常不同的JSON。
所以我们要解剖一下......
{ "Translator": [
{
"TranslatedText": "مرحبا"
}
]
}
JavaScriptSerializer
类是必需的,以便它正确映射值。 (其他库如JSON.net可以解决这个限制。)希望这有所帮助。