我有一个如下定义的对象。从我的WCF服务我可以返回一个没有问题的List,但是当我尝试返回Json时,它返回零字节。没错。
我在这个项目中有大约80个其他方法没有问题,但是这个方法根本就没有转换。我可以将Serializer更改为NewtonSoft,但这已接近该项目的结束。我以前从未见过这个问题。
我的objectX如下,有什么我错过的吗?
public class objectX
{
public string CompanyName { get; set; }
public string Username { get; set; }
public string BranchName { get; set; }
public Nullable<decimal> Amount { get; set; }
public int Id { get; set; }
public int ClientId { get; set; }
public int UserId { get; set; }
public int TypeId { get; set; }
public int Credits { get; set; }
public System.DateTime InvoiceDate { get; set; }
public string Notes { get; set; }
public Nullable<int> LinkedId { get; set; }
public string Status { get; set; }
public Nullable<System.DateTime> DateProcessed { get; set; }
public Nullable<int> ProcessedBy { get; set; }
public int BranchId { get; set; }
public Nullable<System.DateTime> CreatedOn { get; set; }
public Nullable<int> CreatedBy { get; set; }
public Nullable<System.DateTime> ModifiedOn { get; set; }
public Nullable<int> ModifiedBy { get; set; }
}
这是合同:
[OperationContract]
[WebInvoke(Method = "GET",
UriTemplate = "objectX/Read/{clientId}/{branchId}/{statuses}/{dateTime}",
ResponseFormat = WebMessageFormat.Json)]
List<objectX> objectXRead(string clientId, string branchId, string statuses, string dateTime);
答案 0 :(得分:1)
我认为Serializer没有任何问题,我有Web API项目,我在这里使用你的对象是我在控制器中的方法
public List<objectX> GetObjectX()
{
return new List<objectX>() { new objectX() { CompanyName = "c1", BranchName = "b1" },
new objectX() { CompanyName = "c2", BranchName = "b2" }};
}
public class objectX
{
public string CompanyName { get; set; }
public string Username { get; set; }
public string BranchName { get; set; }
public Nullable<decimal> Amount { get; set; }
public int Id { get; set; }
public int ClientId { get; set; }
public int UserId { get; set; }
public int TypeId { get; set; }
public int Credits { get; set; }
public System.DateTime InvoiceDate { get; set; }
public string Notes { get; set; }
public Nullable<int> LinkedId { get; set; }
public string Status { get; set; }
public Nullable<System.DateTime> DateProcessed { get; set; }
public Nullable<int> ProcessedBy { get; set; }
public int BranchId { get; set; }
public Nullable<System.DateTime> CreatedOn { get; set; }
public Nullable<int> CreatedBy { get; set; }
public Nullable<System.DateTime> ModifiedOn { get; set; }
public Nullable<int> ModifiedBy { get; set; }
}
我的结果低于结果。
[{&#34;公司名称&#34;:&#34; C1&#34;&#34;用户名&#34;:空,&#34; BRANCHNAME&#34;:&#34; B1&#34 ;,&#34;量&#34;:空,&#34;标识&#34;:0,&#34;客户端Id&#34;:0,&#34;用户ID&#34;:0,&#34; TYPEID&#34;:0,&#34;现金&#34;:0,&#34; InvoiceDate&#34;:&#34; 0001-01-01T00:00:00&#34;&#34;注释&# 34;:空,&#34; LinkedId&#34;:空,&#34;状态&#34;:空,&#34; DateProcessed&#34;:空,&#34; ProcessedBy&#34;:空,& #34; BranchId&#34;:0,&#34; CreatedOn&#34;:空,&#34; CreatedBy&#34;:空,&#34; ModifiedOn&#34;:空,&#34; ModifiedBy&#34 ;日期null},{&#34;公司名称&#34;:&#34; C2&#34;&#34;用户名&#34;:空,&#34; BRANCHNAME&#34;:&#34; B2&# 34;,&#34;量&#34;:空,&#34;标识&#34;:0,&#34;客户端Id&#34;:0,&#34;用户ID&#34;:0,&#34 ; TYPEID&#34;:0,&#34;现金&#34;:0,&#34; InvoiceDate&#34;:&#34; 0001-01-01T00:00:00&#34;&#34;备注& #34;:空,&#34; LinkedId&#34;:空,&#34;状态&#34;:空,&#34; DateProcessed&#34;:空,&#34; ProcessedBy&#34;:空, &#34; BranchId&#34;:0,&#34; CreatedOn&#34;:空,&#34; CreatedBy&#34;:空,&#34; ModifiedOn&#34;:空,&#34; ModifiedBy&#34;:空}]
如果配置有一些限制,请检查您的配置。
希望这有帮助。
答案 1 :(得分:0)
答案 2 :(得分:0)
我已经找到导致这个问题的原因,尽管这对我没有意义。填充对象的数据来自azure db(sql server)。在一个proc中,InvoiceDate被设置为错误的最小日期(它被错误地从空值保存并转换为01/01/1001 00:00)。尽管仍然是一个真正的日期时间,并且它作为真正的日期时间存储在内存中的对象中,只有当它作为真实日期发送到数据库时,才能以JSON格式返回对象。
我看不出为什么会出现这种情况。数据从proc返回01/01/01 00:00,这是一个真正的日期时间值,因此我希望c#可以这样处理它。即使在进行测试检查以查看从proc返回的日期是&lt; = DateTime.Min(c#),并在代码中将其设置为DateTime.Min(再次)时,它也可以工作。但直截了当的演员&#39;从01/01/01 00:00的db值到datetime不起作用。
更令人困惑的是,它在测试中以XML格式返回,没有任何问题。
感谢@Mitesh提示我设置一个简单的测试,以便发现这个&#39;。