我的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)));
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。