我想序列化(以JSON格式)一个对象列表,其中每个对象都有另一种对象的属性。这是我到目前为止所得到的:
[DataContract]
public class Person{
[DataMember]
public string Name { get; set; }
[DataMember]
public Address FullAddress { get; set; }
}
[DataContract]
public class Address {
private readonly byte[] _foo;
private ulong _value;
public byte[] Foo { get { return (byte[]) _foo.Clone(); }}
public ulong Value { get { return _value; } set { return _value; }}
public Address(byte [] bytes){
_foo = new byte[bytes.Length];
Array.Copy(bytes, _foo, bytes.Length);
foreach(byte b in _foo){
_value |= b; // I do some bit manipulation here and modify the _value
}
}
public MacAddress() // added this otherwise I get an exception
{
}
}
这就是我序列化和反序列化的方式:
public class MyJson{
public MyJson(){
var list = new List<Person>{ /* added a bunch of person here */ };
var serializer = new JavaScriptSerializer();
string json = serializer.Serialize(list);
// serialization works fine
var desList = serializer.Deserialize<IList<Person>>(json);
// the deserialization doesn't properly deserialize Address property.
}
}
如上所述,序列化工作正常,但反序列化不能正确反序列化地址。我得到一个 Value 属性的数字(正如预期的那样)但不是 Foo (我知道它缺少一个setter但是如果由于某种原因,我不能放置一个setter ?)。
我在这里缺少什么?
答案 0 :(得分:2)
我不使用JSon,但如果它像XML序列化那样工作,我猜它与Foo
没有setter的事实有关。您可能需要创建一个使用构造函数来设置Foo
的自定义序列化类。其他人可能能够提供更多细节。