我正面临着一个奇怪的问题。
我在我的PCL项目中有一个通用代码。这段代码目前在我的windows phone项目中运行良好,但不能在android项目中运行。
下面是代码:(有问题的方法是CreateListFriend )
public class Friend : IFriend<User>
{
public int Id { get; set; }
public string UserId { get; set; }
public virtual User User { get; set; }
private static volatile Friend instance;
private static object syncRoot = new Object();
private Friend() { }
public static Friend Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Friend();
}
}
return instance;
}
}
/// <summary>
/// Populate friend instance
/// </summary>
/// <param name="json">Json friend string</param>
public void PopulateFriend(string json)
{
if (!String.IsNullOrEmpty(json))
{
var resultObj = JsonConvert.DeserializeObject<Friend>(json);
Friend.Instance.Id = resultObj.Id;
Friend.Instance.UserId = resultObj.UserId;
}
}
/// <summary>
/// Create friend list from json
/// </summary>
/// <param name="json">json string</param>
/// <returns>friend list</returns>
public List<Friend> CreateListFriend(string json)
{
List<Friend> resultObj = new List<Friend>();
if (!String.IsNullOrEmpty(json))
{
resultObj = JsonConvert.DeserializeObject<List<Friend>>(json);
}
return resultObj;
}
}

正如你在上图中所看到的,Json.net能够“反序列化”,但是对象朋友donc有正确的“字段”……
我已经试着抑制这个类并重新创建它。我已经创建了一个具有相同字段的结构,并且所有的json都正确地对其进行了反序列化,但我不想这样做。
有人有一个想法..。
发布于 2016-06-05 00:34:43
假设我们有两个JSON源文件:
friend.json:
{
"id": 5,
"userId": 6
}friends.json:
[
{
"id": 1,
"userId": 2
},
{
"id": 2,
"userId": 3
},
{
"id": 3,
"userId": 4
},
{
"id": 4,
"userId": 5
}
]我们还有Friend类。根据您的示例,您的类是Entity Framework的POCO。如果源文件与您的类具有相同的属性名称,则不需要JsonProperty属性。
注意:我没有为Friend类定义任何构造函数,所以默认情况下它只有一个公共的无参数构造函数。
public class Friend
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("userId")]
public string UserId { get; set; }
public virtual User User { get; set; }
public override string ToString()
{
return String.Format("User: Id={0}; UserId={1}", Id, UserId);
}
}我会将创建Friend实例的逻辑分开。仅作为示例,我创建了一个FriendLoader类。
public class FriendLoader
{
public Friend LoadFriend(string jsonSource)
{
return String.IsNullOrEmpty(jsonSource) ? null : JsonConvert.DeserializeObject<Friend>(jsonSource);
}
public List<Friend> LoadFriends(string jsonSource)
{
var friends = new List<Friend>();
if (!String.IsNullOrEmpty(jsonSource))
{
friends = JsonConvert.DeserializeObject<List<Friend>>(jsonSource);
}
return friends;
}
}以下是用于测试上述代码的控制台应用程序。
class Program
{
static void Main(string[] args)
{
string friendJson = File.ReadAllText("friend.json");
string friendsJson = File.ReadAllText("friends.json");
var loader = new FriendLoader();
var friend = loader.LoadFriend(friendJson);
var friends = loader.LoadFriends(friendsJson);
Console.WriteLine("One friend:");
Console.WriteLine(friend);
Console.WriteLine();
Console.WriteLine("List of friends:");
friends.ForEach(Console.WriteLine);
}
}希望这能有所帮助。
顺便问一下,您能展示一下您的IFriend<T>接口的定义吗?
发布于 2016-06-06 01:26:50
很抱歉,这周我没有时间发帖。
这与我的类无关,而是与android.platform相关。
我们只需要告诉android平台保留所有属性:
[Preserve(AllMembers = true)]感谢您的宝贵时间:)
https://stackoverflow.com/questions/37628987
复制相似问题