【发布时间】:2018-05-28 08:29:18
【问题描述】:
我尝试从 JSON 字符串中读取 c# 中的对象 - 但结果始终是一个空对象,没有任何异常 - 但我没有看到错误
我从网络服务获得的 JSON 字符串是
{
"CustomUserFields":{
},
"CustomApplicationFields":{
},
"Attachments":[
],
"Tags":[
],
"HasModifyEntriesAccess":true,
"HasViewEntryContentsAccess":true,
"CommentPrompts":{
"AskForCommentOnViewPassword":false,
"AskForCommentOnViewOffline":false,
"AskForCommentOnModifyEntries":false,
"AskForCommentOnMoveEntries":false,
"AskForCommentOnMoveFolders":false,
"AskForCommentOnModifyFolders":false
},
"Id":"c51ca807-9e01-4652-95d0-645a0914b1ba",
"Name":"SecondOne",
"Username":"Second@test.domain",
"Password":null,
"Url":"",
"Notes":"Bla Bla Bla",
"GroupId":"1182570d-d22d-4f2a-babb-3dab4ff48852",
"Created":"2018-02-27T14:39:15+01:00",
"Modified":"2018-02-27T14:39:15+01:00",
"Expires":null,
"UsageComment":null
}
我的代码是这样的
DataContractJsonSerializer serF = new DataContractJsonSerializer(typeof(Credential));
Credential cred1 = new Credential();
MemoryStream msF = new MemoryStream(Encoding.UTF8.GetBytes(response2.Content));
cred1 = serF.ReadObject(msF) as Credential;
msF.Close();
[Serializable, XmlRoot("Credential"), DataContract(Name = "Credential")]
public class Credential
{
[DataMember]
public Guid id = Guid.Empty;
[DataMember]
public Guid groupid = Guid.Empty;
[DataMember]
public string name = String.Empty;
}
我从类中删除了一些属性以简化代码阅读 - 但这没有区别
Credential 对象 cred1 始终具有空属性
【问题讨论】:
-
现在不确定,反序列化是否区分大小写?公元前。你有小写和 JSON 作为 CamelCase 的属性。
-
您使用了
response2,这在您的代码中是不可能看到定义的,但这不应该是一个请求对象吗? -
还使用
using块作为流,以确保所有内容都将被关闭/处置,这样如果你不小心就不会引入内存泄漏
标签: c# json deserialization