C# 从API方法返回JSON

C# 从API方法返回JSON,c#,json,asp.net-core-webapi,C#,Json,Asp.net Core Webapi,我在这里使用ASP.net核心web api(c#) 我有一个JSON字符串,如下所示: { "userId":321, "account":"new "fname":"Adam", "lname":"Silver" "features":[ { "available":true, "status":open, "admin":false } ] } 我

我在这里使用ASP.net核心web api(c#)

我有一个JSON字符串,如下所示:

{
   "userId":321,   
   "account":"new  
   "fname":"Adam",
   "lname":"Silver" 
   "features":[
      {
         "available":true,
         "status":open,
         "admin":false        
      }
   ]
}
我想在我的angular代码中测试这些数据,所以我想将其硬编码到我的API中;然后我希望我的API返回这个。我发现很难的是如何归还这个。我应该将其作为字符串返回还是需要对其进行分析

我的API中有此方法:

[HttpGet]        
public ActionResult<IEnumerable<string>> Get()
{
     return new string[] { "value1", "value2" };
}
[HttpGet]
公共行动结果获取()
{
返回新字符串[]{“value1”,“value2”};
}

我是否需要将其表示为字符串或以某种方式对其进行解析?

您好,请为上述内容找到正确的JSON格式:

{
    "userId": 321,
    "account": "new",
    "fname": "Adam",
    "lname": "Silver",
    "features": [{
        "available": true,
        "status": "open",
        "admin": false
    }]
}
您可以在web API中使用下面的类来传递相应的数据

public class Feature
{
    public bool available { get; set; }
    public string status { get; set; }
    public bool admin { get; set; }
}

public class RootObject
{
    public int userId { get; set; }
    public string account { get; set; }
    public string fname { get; set; }
    public string lname { get; set; }
    public List<Feature> features { get; set; }
}
公共类功能
{
公共bool可用{get;set;}
公共字符串状态{get;set;}
公共bool admin{get;set;}
}
公共类根对象
{
public int userId{get;set;}
公共字符串帐户{get;set;}
公共字符串fname{get;set;}
公共字符串lname{get;set;}
公共列表功能{get;set;}
}
最后,在返回数据时,通过将相应的类对象序列化为JSON格式,将其转换为JSON


希望它能满足您的要求。

将评论纳入答案: 如果您使用的是ActionResult,我将假定您使用的是asp.net mvc。您需要的是JsonResult

    [HttpGet]
    public JsonResult Get()
    {
        return new JsonResult
        {
            Data = new
            {
                userId = 321,
                account = new
                {
                    fname = "Adam",
                    lname = "Silver",
                    features = new object[]{
                    new
                {
                    available = true,
                    status = "open",
                    admin = false
                }
                }
                }
            },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }

您的JSON无效。我们需要纠正它。这可能会有帮助。我获取了您的JSON并更正了语法错误,直到得到以下信息:

{
   "userId": 321,   
   "account": "new",
   "fname": "Adam",
   "lname": "Silver",
   "features":[
      {
         "available": true,
         "status": "open",
         "admin": false        
      }
   ]
}
然后我需要生成一个C#类结构来表示这个JSON。我可以手动创建它,但优秀的可以为我快速生成它。我将此JSON输入并接收以下类:

public class Feature
{
    public bool available { get; set; }
    public string status { get; set; }
    public bool admin { get; set; }
}

public class RootObject
{
    public int userId { get; set; }
    public string account { get; set; }
    public string fname { get; set; }
    public string lname { get; set; }
    public List<Feature> features { get; set; }
}
公共类功能
{
公共bool可用{get;set;}
公共字符串状态{get;set;}
公共bool admin{get;set;}
}
公共类根对象
{
public int userId{get;set;}
公共字符串帐户{get;set;}
公共字符串fname{get;set;}
公共字符串lname{get;set;}
公共列表功能{get;set;}
}
我将这些类定义放入我的应用程序中。然后我需要修改我的action方法来创建这个RootObject类的实例(您应该更改名称以实际匹配它的用途)

[HttpGet]
公共行动结果获取()
{
//创建RootObject的实例并设置属性
var myRootObject=新的RootObject();
myRootObject.userId=321;
myRootObject.account=“新建”;
myRootObject.fname=“Adam”;
myRootObject.lname=“Silver”;
myRootObject.features=新列表();
//创建要素的实例并设置其特性
var feature=新特性();
feature.available=true;
feature.status=“打开”;
feature.admin=false;
//将新功能添加到RootObject的功能集合中
myRootObject.features.Add(feature);
//返回根对象的实例
//该框架将为我们处理将其序列化为JSON的问题
返回myRootObject;
}

请注意,我更改了您方法的签名。我让它不再接受IEnumerable,因为不清楚你为什么会有它。在检查了微软的操作结果后,我将其更改为返回一个ActionResult。

为什么您觉得很难?您面临的问题是什么?从问题中不清楚没有“JSON”这样的东西。JSON是一种用于通过网络发送数据的文本格式。您要么有一个对象,要么有一个字符串。如果您有一个对象,请使用
返回Json(obj)
。如果您有字符串,请将内容类型标题设置为“application/json”。很抱歉,我使用的是asp.net核心web api,然后使用angular作为前端来使用它。与上述一样,默认api返回value1和value2。我想知道如何格式化我上面的json以同样的方式返回。创建一个类结构来表示你想要返回的json结构。然后创建该类的实例,并从action方法返回它。更改方法的返回类型以匹配返回的内容。Mason是对的。忘了直接在Web API中创建JSON吧。创建具有正确结构的对象,并返回它。Web API将为您自动将其序列化为JSON。不,原来它是ASP.NET核心Web API,它确实有一个
ActionResult
,在我确定使用了什么框架之前,我一直没有回答。如果一个问题不清楚,那么在尝试回答之前,请等到问题清楚为止。如果你有足够的声誉发表评论,那么你可以与询问者合作,以获得所需的任何澄清。它将如何以序列号/以我的格式返回json@karen您将创建RootObject的实例,然后从action方法返回该实例。框架为您处理序列化。我应该在哪里为其赋值。在帮助他人时,您不应该假设他们可以访问您的自定义源代码。另外,将void作为action方法的返回类型也没有意义。而且没有理由生成WebRequest…@karen,您还需要创建
公共列表功能{get;set;}
的实例。
[HttpGet]        
public ActionResult<RootObject> Get()
{
    // Create an instance of our RootObject and set the properties
    var myRootObject = new RootObject();
    myRootObject.userId = 321;
    myRootObject.account = "new";
    myRootObject.fname = "Adam";
    myRootObject.lname = "Silver";
    myRootObject.features = new List<Feature>();

    // Create an instance of a feature and set its properties
    var feature = new Feature();
    feature.available = true;
    feature.status = "open";
    feature.admin = false;

    // Add the new feature to the features collection of our RootObject    
    myRootObject.features.Add(feature);

    // Return the instance of our RootObject
    // The framework will handle serializing it to JSON for us
    return myRootObject;
}