Angularjs 将Json对象从c#返回给角度控制器
我试图从一个C#WebAPI方法返回一个Json对象。我当前的c#代码创建一个IEnumerable类型,填充一个类的对象,然后将其返回给JavaScript调用。但是,它返回的是一个5元素数组,而不是一个包含5个字段的Json对象 我只想返回一个包含5个字段的Json对象,格式如下:Angularjs 将Json对象从c#返回给角度控制器,angularjs,asp.net-mvc-4,c#-4.0,Angularjs,Asp.net Mvc 4,C# 4.0,我试图从一个C#WebAPI方法返回一个Json对象。我当前的c#代码创建一个IEnumerable类型,填充一个类的对象,然后将其返回给JavaScript调用。但是,它返回的是一个5元素数组,而不是一个包含5个字段的Json对象 我只想返回一个包含5个字段的Json对象,格式如下: {"domain":"localhost", "spaceName":"rz64698", etc...} 通过这种方式,在javascript中,我可以简单地访问每个字段 _domain = rzEnvP
{"domain":"localhost", "spaceName":"rz64698", etc...}
通过这种方式,在javascript中,我可以简单地访问每个字段
_domain = rzEnvParams.domainName;
_space = rzEnvParams.spaceName;
从c#(到我的角度服务)返回的响应对象是这个数组。这里我只展示了五个元素中的两个:
$id: "1"
$type: "RgSys.Controllers.RgController+RzEnvParameters, RgSys"
clConfig: "C:\Rz\rz64698\master\bin\cl_config.xml"
domainName: null
envName: null
port: null
spaceName: null
$id: "2"
$type: "RgSys.Controllers.RgController+RzEnvParameters, RgSys"
clConfig: "null
domainName: null
envName: null
port: null
spaceName: "rz64698"
依此类推,直到$id:“5”
下面是我目前使用javaScript访问数组的方式(它可以工作,但我觉得有一种更有效的方法):
下面是当前返回的c#代码:
public class RzEnvParameters{
public string clConfig;
public string envName;
public string spaceName;
public string domainName;
public string port;
}
[HttpGet]
public IEnumerable<RzEnvParameters> GetRzEnv()
{
string clConfig = System.Configuration.ConfigurationManager.AppSettings["ClConfig"].ToString();
string envName = System.Configuration.ConfigurationManager.AppSettings["EnvironmentName"].ToString();
string spaceName = System.Configuration.ConfigurationManager.AppSettings["SpaceName"].ToString();
string domainName = System.Configuration.ConfigurationManager.AppSettings["DomainName"].ToString();
string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();
var razParams = new List<RzEnvParameters>{
new RzEnvParameters{clConfig=clConfig},
new RzEnvParameters{envName=envName},
new RzEnvParameters{spaceName=spaceName},
new RzEnvParameters{domainName=domainName},
new RzEnvParameters{port=port}
};
return rzParams;
}
公共类rzenpparameters{
公共字符串clConfig;
公共字符串名称;
公共字符串spaceName;
公共字符串域名;
公共字符串端口;
}
[HttpGet]
公共IEnumerable GetRzEnv()
{
字符串clConfig=System.Configuration.ConfigurationManager.AppSettings[“clConfig”].ToString();
字符串envName=System.Configuration.ConfigurationManager.AppSettings[“EnvironmentName”].ToString();
string spaceName=System.Configuration.ConfigurationManager.AppSettings[“spaceName”].ToString();
字符串domainName=System.Configuration.ConfigurationManager.AppSettings[“domainName”].ToString();
字符串端口=System.Configuration.ConfigurationManager.AppSettings[“端口”].ToString();
var razParams=新列表{
新RzEnvParameters{clConfig=clConfig},
新RzEnvParameters{envName=envName},
新RzEnvParameters{spaceName=spaceName},
新RzEnvParameters{domainName=domainName},
新RzEnvParameters{port=port}
};
返回rzParams;
}
一句话:我如何重构c#代码以返回Json对象,而不是一个由5个元素组成的数组
谢谢
Bob使用JSON序列化程序。这是一个与.NET,但有几个在那里。这是一个简单的代码片段,仅用于说明序列化
// your code to set your list List<RzEnvParameters>, var razParams = ...
MemoryStream stream1 = new MemoryStream();
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(List<RzEnvParameters>));
ser.WriteObject(stream1, razParams);
stream1.Position = 0;
StreamReader sr = new StreamReader(stream1);
var jsonToReturn = sr.ReadToEnd();
//设置列表的代码,var razParams=。。。
MemoryStream stream1=新的MemoryStream();
DataContractJsonSerializer ser=新的DataContractJsonSerializer(类型(列表));
ser.WriteObject(stream1,razParams);
1.位置=0;
StreamReader sr=新的StreamReader(stream1);
var jsontoreurn=sr.ReadToEnd();
也许我错了,但为什么要创建5个单独的对象,而不是一个设置了所有5个属性的对象呢
public RzEnvParameters GetRzEnv()
{
string clConfig = System.Configuration.ConfigurationManager.AppSettings["ClConfig"].ToString();
string envName = System.Configuration.ConfigurationManager.AppSettings["EnvironmentName"].ToString();
string spaceName = System.Configuration.ConfigurationManager.AppSettings["SpaceName"].ToString();
string domainName = System.Configuration.ConfigurationManager.AppSettings["DomainName"].ToString();
string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();
var razParams = new RzEnvParameters{clConfig=clConfig,
envName=envName,
spaceName=spaceName,
domainName=domainName,
port=port
};
return rzParams;
}
看起来您正在返回一个RzEnvParameters列表,其中每个参数只设置了一个属性。您这样做而不只是返回一个带有所有属性集的RzEnvParameters对象,有什么原因吗
[HttpGet]
public RzEnvParameters GetRzEnv()
{
string clConfig = System.Configuration.ConfigurationManager.AppSettings["ClConfig"].ToString();
string envName = System.Configuration.ConfigurationManager.AppSettings["EnvironmentName"].ToString();
string spaceName = System.Configuration.ConfigurationManager.AppSettings["SpaceName"].ToString();
string domainName = System.Configuration.ConfigurationManager.AppSettings["DomainName"].ToString();
string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();
var razParams = new RzEnvParameters
{
clConfig = clConfig,
envName = envName,
spaceName = spaceName,
domainName = domainName,
port = port
};
return razParams;
}
这会将您的javascript更改为以下内容:
$http({
method: 'GET',
encoding: 'JSON',
url: 'breeze/breeze/GetRzEnv'
}).success(function (data, status, headers, config) {
rzEnvParams = data;
deferred.resolve(rzEnvParams);
_domain = rzEnvParams.domainName;
_port = rzEnvParams.port;
//etc
});
});
如果我正确理解了你的问题,你需要做如下的事情
[HttpGet]
public object GetRzEnv()
{
string clConfig = System.Configuration.ConfigurationManager.AppSettings["ClConfig"].ToString();
string envName = System.Configuration.ConfigurationManager.AppSettings["EnvironmentName"].ToString();
string spaceName = System.Configuration.ConfigurationManager.AppSettings["SpaceName"].ToString();
string domainName = System.Configuration.ConfigurationManager.AppSettings["DomainName"].ToString();
string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();
var razParams = new {
clConfig=new RzEnvParameters{clConfig=clConfig},
envName=new RzEnvParameters{envName=envName},
spaceName=new RzEnvParameters{spaceName=spaceName},
domainName=new RzEnvParameters{domainName=domainName},
port=new RzEnvParameters{port=port}
};
return rzParams;
}
看起来您正在返回一个RzEnvParameters列表,其中只设置了一个属性。您这样做而不只是返回一个带有所有属性集的RzEnvParameters对象,有什么原因吗?有三个很好的回答。我必须只选择一个答案,还是有办法给三个回答者打分?据我所知,你只能选择一个
[HttpGet]
public object GetRzEnv()
{
string clConfig = System.Configuration.ConfigurationManager.AppSettings["ClConfig"].ToString();
string envName = System.Configuration.ConfigurationManager.AppSettings["EnvironmentName"].ToString();
string spaceName = System.Configuration.ConfigurationManager.AppSettings["SpaceName"].ToString();
string domainName = System.Configuration.ConfigurationManager.AppSettings["DomainName"].ToString();
string port = System.Configuration.ConfigurationManager.AppSettings["Port"].ToString();
var razParams = new {
clConfig=new RzEnvParameters{clConfig=clConfig},
envName=new RzEnvParameters{envName=envName},
spaceName=new RzEnvParameters{spaceName=spaceName},
domainName=new RzEnvParameters{domainName=domainName},
port=new RzEnvParameters{port=port}
};
return rzParams;
}