我试图将JSON字符串解析为对象。我有下面的实体中,我解析JSON字符串
public class Room : BaseEntity
{
public string Name { get; set; }
public string EmailAddress { get; set; }
public string RoomListEmailAddress { get; set; }
public string MinimumXCoordinateInMap { get; set; }
public string MinimumYCoordinateInMap { get; set; }
public string MaximumXCoordinateInMap { get; set; }
public string MaximumYCoordinateInMap { get; set; }
public string RoomCapacity { get; set; }
public List<RoomImage> RoomImage { get; set; }
public string FloorName { get; set; }
public string CreatedDate { get; set; }
public string CreatedId { get; set; }
public string LastUpdatedDate { get; set; }
public string LastUpdatedId { get; set; }
public InternalOnly InternalOnly { get; set; }
//public List<Equipment> Equipment { get; set; }
public override string ToString()
{
return this.Name;
}
}
public class RoomImage : BaseEntity
{
public string ImagePath { get; set; }
public string ImageType { get; set; }
public string CreatedDate { get; set; }
public string CreatedId { get; set; }
public string LastUpdatedDate { get; set; }
public string LastUpdatedId { get; set; }
public InternalOnly InternalOnly { get; set; }
}
public class InternalOnly : BaseEntity
{
public string RoomId { get; set; }
public string FloorId { get; set; }
}
public class BaseEntity
{
}
我使用下面的方法来解析字符串转换成目标
public static T ParseObjectToJSON<T>(string responseText)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T));
using (MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(responseText)))
{
var rootObject = serializer.ReadObject(stream);
//return Convert.ChangeType(rootObject,typeof(T),System.Globalization.CultureInfo.CurrentCulture.TextInfo);
return (T)rootObject;
}
}
下面是我试图解析
JSON字符串https://docs.google.com/document/d/1k81M_UxIrXpHUPQNDUCHDfNw1wY7LM4mAaXjwpYMshk/edit?usp=sharing
下面的JSON字符串工作
https://docs.google.com/document/d/1uQNwMmSyEZSolyxUVJl6gXzZPr6aRAf_WAogmUvVqt4/edit?usp=sharing
在解析我得到以下错误
数据合同类型“GAP.Entities.Room”不能反序列化,因为成员“RoomImage”不公开。公开成员将修复此错误。或者,您可以将其设置为内部,并在程序集中使用InternalsVisibleToAttribute属性,以启用内部成员的序列化 - 请参阅文档以获取更多详细信息。请注意,这样做有一定的安全隐患。
注 - RoomImage在实体类中被公开标记。仅当JSON字符串包含RoomImage数组字符串时,才会出现此错误,否则不会出现错误。
任何帮助,高度赞赏。
感谢 维诺德
使用JSon.NET序列化和反序列化。看看这个网站的比较http://james.newtonking.com/projects/json-net.aspx – 2013-04-26 06:27:44
请发布'RoomImage'和'BaseEntity'的代码。 – haim770 2013-04-26 06:34:50