当反序列化对象时,有一种简单的方法可以告诉反序列化程序"不要序列化此属性的内容,无论序列化数据是什么样的,都将其转储到此属性中。 (显然,序列化时反向)
所以我有一个正在从JSON反序列化的类(当调用使用此类型的Web方法时,反序列化由.NET自动启动)。 传入JSON数据包中的大多数数据都由服务器端代码使用,但这一属性仅供客户端使用。
服务器端代码无需知道内容,甚至不需要知道此属性的格式 - 它应该被视为黑盒子,只是按原样复制并在适当的时候返回给客户端
如果我将属性的类型设置为字符串反序列化失败,因为它尝试在字符串对象上设置属性。 如果我将属性的类型设置为对象,则它包含部分反序列化的字典对象。
如果整个对象只存在于内存中,那么字典对象会很好,但实际上整个对象会被重新序列化为xml [不要问,足以说XSLT]。
我可以将属性的序列化实现为xml(或者只返回JSON并将其存储在xml中),但这似乎是浪费精力。
一些代码块 -
班级:
public class MyClass : IMyserializationInterface
{
public string PropertyThatShouldBeDeserializedAsNormal {get;set;}
[SomeAttr] public object PropertyThatShouldNotBeDeserialized {get;set;}
public void Deserialize(IDictionary<string, object> dictionary, System.Web.Script.Serialization.JavaScriptSerializer serializer, MySerializer customSerializer)
{
customSerializer.DefaultDeSerialize<MyClass>(this, dictionary, serializer);
customSerializer.PropagateParent(this);
}
界面:
public interface IMyserializationInterface
{
void Deserialize(IDictionary<string, object> dictionary,
System.Web.Script.Serialization.JavaScriptSerializer serializer,
MySerializer customSerializer);
IDictionary<string, object> Serialize(System.Web.Script.Serialization.JavaScriptSerializer serializer, MySerializer customSerializer);
}
The Serializer:
public class MySerializer: System.Web.Script.Serialization.JavaScriptConverter
{
//class processes some attributes to decide what to de/serialize
//methods in the class are supplied with the already part-deserialized dictionary object
//what we really need is the raw JSON
}
的web.config:
<configuration>
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization>
<converters>
<add name="IMyserializationInterface" type="MySerializer"/>
</converters>
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
</configuration>
JSON:
{
"PropertyThatShouldBeDeserializedAsNormal":"SomeString",
"PropertyThatShouldNotBeDeserialized": {"An":"Object"}
}
我正在寻找一种低开销的方式来简单地跳过特定属性的反序列化过程 - 即PropertyThatShouldNotBeDeserialized
将包含字符串{"An":"Object"}