我的wcf服务使用包装格式的主体样式。当我尝试使用DataContractJsonSerializer反序列化时,无法正确反序列化json
SignInResult returnedUser = new SignInResult();
           MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(provider.SignIn(username, password)));
           DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(SignInResult),"root");
           returnedUser =  serializer.ReadObject(stream) as SignInResult;
           stream.Close();
           return returnedUser;
 
但是我没有根据以下json填充对象
{
  "SignInResult": {
    "CreationDate": "/Date(1480598102923+0000)/",
    "Email": "bladsa@as.com",
    "IsApproved": true,
    "IsLockedOut": false,
    "IsOnline": true,
    "IsValidLogin": true,
    "LastActivityDate": "/Date(1490954750307+0100)/",
    "LastLockoutDate": "/Date(-6816268800000+0000)/",
    "LastLoginDate": "/Date(1490954750307+0100)/",
    "LastPasswordChangedDate": "/Date(-2208988800000+0000)/",
    "ProviderName": "LoginProvider",
    "ProviderUserKey": "dcc5f38f-f71e-4d9d-bdb2-58fb60b7a65e",
    "UserName": "schoi"
  }
}
 
如果我使用裸格式,则它确实可以工作,因此它肯定与包装的消息格式有关。
我知道我可以在Newsoft json中执行此操作,但我知道会被要求使用Microsoft的方式。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
创建一个jsondeserilzer像这样的方法:
public static T DataJsonDeserializer<T>(string jsonString)
{
    var mStrm = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
    var jsonSerializer = new DataContractJsonSerializer(typeof(T));
    var objResponse = jsonSerializer.ReadObject(mStrm);
    return (T)objResponse;
}
 
然后我们创建一个json对象,如下所示:
public class SignInResult
{
    public DateTime CreationDate { get; set; }
    public string Email { get; set; }
    public bool IsApproved { get; set; }
    public bool IsLockedOut { get; set; }
    public bool IsOnline { get; set; }
    public bool IsValidLogin { get; set; }
    public DateTime LastActivityDate { get; set; }
    public DateTime LastLockoutDate { get; set; }
    public DateTime LastLoginDate { get; set; }
    public DateTime LastPasswordChangedDate { get; set; }
    public string ProviderName { get; set; }
    public string ProviderUserKey { get; set; }
    public string UserName { get; set; }
}
public class RootObject
{
    public SignInResult SignInResult { get; set; }
}
 
最终,您可以对以下任何内容进行反序列化:
var x = JsonDeserializer<RootObject>(provider.SignIn(username, password)));