あなたはJavaScriptConverterオブジェクトをコード化して供給することにより、全体のシリアル化プロセスを制御することができます。
ここではいくつかのサンプルコードです。
public class TestObject
{
[ScriptIgnore]
public string TestString { get; set; }
}
...そして、それのインスタンスをシリアル化:テスト用
は、私たちはScriptIgnore
属性で飾られている単一のプロパティで、この単純なクラスを使用してみましょう
var serializer = new JavaScriptSerializer();
Console.WriteLine(serializer.Serialize(new TestObject { TestString = "test" }));
もちろん、プロパティは無視されます。出力:
{}
今、私たちはJavaScriptConverter
を定義します。ここに関連する部分はSerialize()
の私達の実装です:
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var testObject = obj as TestObject;
if (testObject != null)
{
// Create the representation. This is a simplified example.
Dictionary<string, object> result = new Dictionary<string, object>();
result.Add("TestString", testObject.TestString);
return result;
}
return new Dictionary<string, object>();
}
我々は単に出力に無視プロパティを追加します。それでおしまい!
あなたはすべてをシリアル化したいときには、コンバータを提供したいです。コンバータを使用しない場合、デフォルトでは注釈付きプロパティは無視されます。
使用:
serializer.RegisterConverters(new List<JavaScriptConverter> { new TestObjectConverter() });
出力:
{ "たTestString": "テスト"}
完全なコードダンプ:
void Main()
{
var serializer = new JavaScriptSerializer();
Console.WriteLine(serializer.Serialize(new TestObject { TestString = "test" })); // prints: {}
serializer.RegisterConverters(new List<JavaScriptConverter> { new TestObjectConverter() });
Console.WriteLine(serializer.Serialize(new TestObject { TestString = "test" })); // prints: {"TestString":"test"}
}
public class TestObject
{
[ScriptIgnore]
public string TestString { get; set; }
}
public class TestObjectConverter : JavaScriptConverter
{
private static readonly IEnumerable<Type> supportedTypes = new List<Type> { typeof(TestObject) };
public override IEnumerable<Type> SupportedTypes => supportedTypes;
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var testObject = obj as TestObject;
if (testObject != null)
{
// Create the representation. This is a simplified example. You can use reflection or hard code all properties to be written or do it any other way you like - up to you.
Dictionary<string, object> result = new Dictionary<string, object>();
result.Add("TestString", testObject.TestString);
return result;
}
return new Dictionary<string, object>();
}
}