Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WCF和ResponseFormat=WebMessageFormat.Json,具有继承的类_Json_Wcf_Serialization - Fatal编程技术网

WCF和ResponseFormat=WebMessageFormat.Json,具有继承的类

WCF和ResponseFormat=WebMessageFormat.Json,具有继承的类,json,wcf,serialization,Json,Wcf,Serialization,我遇到了另一个显然涉及继承类的问题: 例如,我有一个超级班 public class Person { public string Firstname { get; set; } public string Lastname { get; set; } public string Email { get; set; } } 然后是一个子类: public class Member : Person { public int MembershipId { ge

我遇到了另一个显然涉及继承类的问题:

例如,我有一个超级班

public class Person 
{
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public string Email { get; set; }
}
然后是一个子类:

public class Member : Person
{
    public int MembershipId  { get; set; }
    public string Password { get; set; }
    public List<Foo> Foos { get; set; }
}
公共类成员:个人
{
public int MembershipId{get;set;}
公共字符串密码{get;set;}
公共列表Foos{get;set;}
}
使用以下代码返回成员时,我没有得到任何有用的信息:

[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public Member GetMember()
{
    return new Member 
    { 
         Firstname = "Jane", 
         Lastname = "Doe", 
         Email = "jane.doe@doe.com",
         MembershipId = 10,
         Password = "*****",
         Foos = new List<Foo> { };  
    };
}
[运营合同]
[WebGet(ResponseFormat=WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedRequest)]
公共成员GetMember()
{
返回新成员
{ 
Firstname=“Jane”,
Lastname=“Doe”,
Email=“简。doe@doe.com",
成员身份ID=10,
Password=“*******”,
Foos=新列表{};
};
}
未继承的类/对象被序列化并以json格式返回,没有任何问题

是否有任何方法可以正确返回我的成员对象?我一直在处理这个问题,我的结论是它一定与继承的类和json有关。

试试这个修复

[DataContract]
public class Person 
{
    [DataMember]
    public string Firstname { get; set; }
    [DataMember]
    public string Lastname { get; set; }
    [DataMember]
    public string Email { get; set; }
}
[DataContract]
public class Member : Person
{
    [DataMember]
    public string MembershipId  { get; set; }
    [DataMember]
    public string Password { get; set; }
    [DataMember]
    public List<Foo> Foos { get; set; }
}
[DataContract]
公共阶层人士
{
[数据成员]
公共字符串名{get;set;}
[数据成员]
公共字符串Lastname{get;set;}
[数据成员]
公共字符串电子邮件{get;set;}
}
[数据合同]
公开课成员:人
{
[数据成员]
公共字符串成员身份ID{get;set;}
[数据成员]
公共字符串密码{get;set;}
[数据成员]
公共列表Foos{get;set;}
}

实际上,我关于继承类和JSON序列化的理论是有缺陷的。 它可以工作,我不需要[Datacontrac]和[Datamember]装饰器。还有别的问题。也许我的结构太深太长了。
我想知道JSON在大小方面是否有一些限制。

我最后使用了Newtonsoft的JSON.net。我建议使用它,而不是浪费时间在.net中的原生json特性上


您得到的错误是什么?我没有得到任何错误。它只是挂起并显示正在浏览器中等待localhost。事件日志中也没有任何内容。{“d”:[{“_类型”:“MyObject:#MywebApp.Entities”},{“_类型”:“MyObject:#MywebApp.Entities”},{“_类型”:“MyObject:#MywebApp.Entities”}这很奇怪。如果我将所有值硬编码到我的对象中,它会毫无问题地返回一个序列化的JSON字符串。如果我从数据库中动态填充我的对象,那么什么都不起作用。我会在解决此问题后立即更新此线程…将其序列化为xml会显示许多错误。显然IEnumerable和dictionary/hashtables是不正确的ot在xml序列化过程中很受欢迎。在JSON序列化过程中肯定存在同样的问题。除了我在这里的回答之外,我可以看到我使用了双重JSON编码。由于我的ResponseFormat=WebMessageFormat.JSON。我现在正试图弄清楚,如何从我的wcf服务返回纯字符串/纯文本,这样它就不会得到双重JSON编码。我从未发现问题所在,在篡改数据或fiddler中也没有发现任何问题。我的结论仍然是.net中的本机json功能不稳定。我不得不改用Newtonsoft的json.net。