您好我的wcf webservice如下
public string GetValues(int CompanyCode)
{
Logger.EnterFunction();
string value = "[";
try
{
Logger.EnterFunction();
int Comppany = CheckCompanyValid(CompanyCode);
if (Comppany == 1)
{
value += "{";
value += "IncomeAmount:" + GetIncomeAmount(CompanyCode).ToString();
value += ",\"ExpenseAmount\":" + GetExpenseAmount(CompanyCode).ToString().Trim();
value += ",\"NetProfitLossAmount\":" + GetNetProfitLoss(CompanyCode);
value += ",\"CustomerOutStanding\":" + GetCustomerOutStanding(CompanyCode);
value += ",\"SupplierOutStanding\":" + GetSupplierOutStanding(CompanyCode);
value += ",\"CorporationTaxAmount\":" + GetCorporationTaxAmount(CompanyCode);
value += ",\"VATAmount\":" + GetVATAmount(CompanyCode);
value += ",\"PayeAmount\":" + GetPayeAmount(CompanyCode);
value += ",\"NumberOfBankTransactionUnProcessed\":" + GetNumberOfBankTransactionUnProcessed(CompanyCode);
value += ",\"NumberOfQueries\":" + GetNumberOfQueries(CompanyCode);
value += ",\"ReserveValue\":" + GetReserveValue(CompanyCode);
value += ",\"AllBankBalance\":" + GetAllBankBalance(CompanyCode) + "}";
}
}
catch (Exception ex)
{
Logger.Error(ex);
}
value += "]";
Logger.LeaveFunction();
return value;
}
哪个好,并运行以下输出
"[{IncomeAmount:117730.8400,\"ExpenseAmount\":43391.5400,\"NetProfitLossAmount\":74339.3000,\"CustomerOutStanding\":107541.0400,\"SupplierOutStanding\":6173.6700,\"CorporationTaxAmount\":1000.0000,\"VATAmount\":700.0000,\"PayeAmount\":3250.0000,\"NumberOfBankTransactionUnProcessed\":22,\"NumberOfQueries\":2,\"ReserveValue\":(73339.30),\"AllBankBalance\":5299.5800}]"
没有问题,但我的问题是我不想要从一天中杀死我的斜线 我尝试过很多东西,比如逃避,替换和使用 memorystream ,但有些事情仍然保持不变
我知道newtonsoft.dll但我无法使用它 我希望我能清楚地解释你......提前感谢.......
还有一件事要补充 我也尝试过使用类,但结果仍然相同............
答案 0 :(得分:2)
你在哪里读取输出字符串?
您提供的代码对我来说是正确的,假设您希望",\"NetProfitLossAmount\":"
呈现为","NetProfitLossAmount":"
- 这就是\字符的用途;它逃脱了#34;这样它就被视为字符串的一部分,而不是终结符。 Visual Studio调试工具倾向于以转义形式表示字符串,以便您可以轻松地将它们粘贴回C#并使其按预期工作。要检查服务是否真的返回了您期望的文本,请将结果写入文件,然后查看 的内容。
答案 1 :(得分:1)
问题是你是否使用了一个字符串作为返回类型,你真的想要返回一个json对象。由于字符串包含你的json,DataContractJsonSerializer转义了双引号,以防止客户混淆。
如果您创建了一个正确的DataTransferObject,则可以完全放大DataContractJsonSerializer,而无需在当前解决方案中自定义所有序列化字符串的构建。
需要进行以下更改:
[DataContract]
public class Company
{
[DataMember]
public int IncomeAmount { get; set; }
[DataMember]
public int ExpenseAmount { get; set; }
/// add the other properties your self
}
请注意,您必须返回一组公司类!
[WebGet(
UriTemplate = "/GetValues?CompanyCode={CompanyCode}",
BodyStyle = WebMessageBodyStyle.Bare,
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
Company[] GetValues(int CompanyCode);
public Company[] GetValues(int CompanyCode)
{
Logger.EnterFunction();
var companies = new Company[1];
try
{
Logger.EnterFunction();
int Comppany = CheckCompanyValid(CompanyCode);
if (Comppany == 1)
{
companies[0] = new Company
{
IncomeAmount = GetIncomeAmount(CompanyCode),
ExpenseAmount = GetExpenseAmount(CompanyCode),
// etc add your other properties here
};
}
}
catch (Exception ex)
{
Logger.Error(ex);
}
Logger.LeaveFunction();
return companies;
}
如果请求的Content-Type标头也是json类型,WCF / http管道将返回一个json字符串。使用像Fiddler这样的低级别httprequestbuilder来模拟它。
请求强>
GET /Service1.svc/GetValues?CompanyCode=3 HTTP / 1.1
用户代理:Fiddler
内容类型:application / json
主持人:localhost:42369
<强>响应强>
[{&#34; ExpenseAmount&#34;:3,&#34; IncomeAmount&#34; 42}]
答案 2 :(得分:0)
看起来应该是
[OperationContract]
[WebGet(UriTemplate = "GetValues?CompanyCode={CompanyCode}")]
Stream GetValues(int CompanyCode);
并从方法
value += "]";
Logger.LeaveFunction();
WebOperationContext.Current.OutgoingResponse.ContentType = "text/json";
string json =(value);
return new MemoryStream(Encoding.UTF8.GetBytes(json));
如果你不使用流,你的输出将没有布料,所以它应该被内存流包围,这将为你提供纯粹的输出,因为我需要......谢谢