C# WCF服务返回列表。需要在一个Json字符串中返回2个对象

C# WCF服务返回列表。需要在一个Json字符串中返回2个对象,c#,json,wcf,C#,Json,Wcf,这是我的第一个堆栈溢出帖子,所以让我放松一下:) 我已经为这个问题挣扎了很长一段时间 目前,我的WCF从数据库读取数据并将其作为JSON返回 这就是它的样子: { "shoppinglistitemsResult": [ { "description": "this is my notes description", "name": "mynotename", "pid": "1",

这是我的第一个堆栈溢出帖子,所以让我放松一下:)

我已经为这个问题挣扎了很长一段时间

目前,我的WCF从数据库读取数据并将其作为JSON返回

这就是它的样子:

{
    "shoppinglistitemsResult": [
        {
            "description": "this is my notes description",
            "name": "mynotename",
            "pid": "1",
            "status": "1",
            "username": "test"
        }
    ]
}
我希望它看起来像这样:

{
    "shoppinglistitemsResult": [
        {
            "description": "123",
            "name": "123",
            "pid": "123",
            "status": "123",
            "username": "test"
        }
    ],
    "success": 1
}
最后有一个额外的对象

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "displayAllNotes?name={username}&pass={password}")]
List<Service1.wsNotes> shoppinglistitems(string username, string password);
[运营合同]
[WebInvoke(Method=“GET”,ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped,UriTemplate=“displayAllNotes?name={username}&pass={password}”)]
列出shoppinglistitems(字符串用户名、字符串密码);

然后构建一个包含列表和所需额外对象的类作为成员,并以json的形式返回该类的实例。

然后构建一个包含列表和所需额外对象的类作为成员,并以json的形式返回该类的实例。

您需要返回一个同时包含列表和对象的对象属性,而不是直接使用列表。将JSON中的每一组花括号都视为需要创建的新对象/类,并将逗号分隔的所有内容视为该对象上的属性。因此,外部花括号需要由一个具有两个属性(shoppinglistitemsResult和success)的类表示。您需要为列表中的所有项目设置第二个类

这里有一种使用泛型的方法。我还冒昧地添加了一些您可能想要使用的附加属性。对于不需要返回值但可能希望返回成功或错误消息的操作,我还包括了一个没有“Result”的响应类型

[DataContract]
public class Response : IExtensibleDataObject
{
    public Response()
    {
        Success = true;
        ErrorMessage = null;
    }

    [DataMember]
    public bool Success { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }

    public ExtensionDataObject ExtensionData { get; set; }
}

[DataContract]
public class Response<TResult> : Response
{
    [DataMember]
    public TResult Result { get; set; }
}
[DataContract]
公共类响应:IExtensibleDataObject
{
公众回应(
{
成功=真实;
ErrorMessage=null;
}
[数据成员]
公共bool成功{get;set;}
[数据成员]
公共字符串错误消息{get;set;}
公共扩展数据对象扩展数据{get;set;}
}
[数据合同]
公共课回应:回应
{
[数据成员]
公共TResult结果{get;set;}
}
然后你的运营合同会像这样

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "displayAllNotes?name={username}&pass={password}")]
Response<List<Notes>> GetShoppingListItems();
[运营合同]
[WebInvoke(Method=“GET”,ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped,UriTemplate=“displayAllNotes?name={username}&pass={password}”)]
响应GetShoppingListItems();

您需要返回一个同时包含list和success属性的对象,而不是直接返回list。将JSON中的每一组花括号都视为需要创建的新对象/类,并将逗号分隔的所有内容视为该对象上的属性。因此,外部花括号需要由一个具有两个属性(shoppinglistitemsResult和success)的类表示。您需要为列表中的所有项目设置第二个类

这里有一种使用泛型的方法。我还冒昧地添加了一些您可能想要使用的附加属性。对于不需要返回值但可能希望返回成功或错误消息的操作,我还包括了一个没有“Result”的响应类型

[DataContract]
public class Response : IExtensibleDataObject
{
    public Response()
    {
        Success = true;
        ErrorMessage = null;
    }

    [DataMember]
    public bool Success { get; set; }
    [DataMember]
    public string ErrorMessage { get; set; }

    public ExtensionDataObject ExtensionData { get; set; }
}

[DataContract]
public class Response<TResult> : Response
{
    [DataMember]
    public TResult Result { get; set; }
}
[DataContract]
公共类响应:IExtensibleDataObject
{
公众回应(
{
成功=真实;
ErrorMessage=null;
}
[数据成员]
公共bool成功{get;set;}
[数据成员]
公共字符串错误消息{get;set;}
公共扩展数据对象扩展数据{get;set;}
}
[数据合同]
公共课回应:回应
{
[数据成员]
公共TResult结果{get;set;}
}
然后你的运营合同会像这样

[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "displayAllNotes?name={username}&pass={password}")]
Response<List<Notes>> GetShoppingListItems();
[运营合同]
[WebInvoke(Method=“GET”,ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.Wrapped,UriTemplate=“displayAllNotes?name={username}&pass={password}”)]
响应GetShoppingListItems();

谢谢您的回答。我真的很难将两个对象返回到一个类。说到c#和wcf,我真的不太好。如果我有一个2数组。我如何在一个类中同时返回它们?如果这能让你更容易,你可以写下你认为JSON应该是什么样子,然后从那里返回到你的结果类中。如果你需要返回两个列表,你可以创建一个有两个属性的类(每个列表一个属性)。然后返回该类的一个实例。如果你需要进一步的澄清,只需回复,我就可以写一个例子。谢谢你的回答。我真的很难将两个对象返回到一个类。说到c#和wcf,我真的不太好。如果我有一个2数组。我如何在一个类中同时返回它们?如果这能让你更容易,你可以写下你认为JSON应该是什么样子,然后从那里返回到你的结果类中。如果你需要返回两个列表,你可以创建一个有两个属性的类(每个列表一个属性)。然后返回该类的一个实例。如果你需要进一步的澄清,只需回复,我就可以写一个例子。