当我使用Newtonsoft序列化对象时遇到问题,
当我序列化一个继承类的实例的对象时,例如:
class A
{
public string A { get; set; }
}
和
class B:A
{
public string B { get; set; }
}
和C类:
class C
{
public string A { get; set; }
public string B { get; set; }
}
我在服务器端使用B类,在客户端使用我的客户,因为他只知道必须使用哪个属性,并且我们都使用相同的策略逻辑来制作加密字符串。我发现序列化字符串的顺序不相等:B可能是[A:1;B:2]
而C可能是[B:2:A:1]
,希望你的帮助。
这是我的测试数据:
[
{
"amount":100.0,
"memberId":75,
"orderId":233,
"projectId":233,
"consumeNo":"6d1dd604b0844fa28b78380e5a05f1c1"
}
]
客户给我的帖子数据是:
[
{
"memberid":75,
"orderid":233,
"amount":100.0,
"projectid":233,
"consumeno":"6d1dd604b0844fa28b78380e5a05f1c1"
}
]
你可以看到帐号和memberid和orderid是不一样的顺序,因为他用C而我用B
最后我通过使用另一种方法和下面的代码来实现:
var settings = new JsonSerializerSettings()
{
ContractResolver = new OrderedContractResolver()
};
string listJons = JsonConvert.SerializeObject(item.Value,settings);
public class OrderedContractResolver : DefaultContractResolver
{
protected override System.Collections.Generic.IList<JsonProperty> CreateProperties(System.Type type, MemberSerialization memberSerialization)
{
return base.CreateProperties(type, memberSerialization).OrderBy(p => p.PropertyName).ToList();
}
}