2013-12-18 50 views
2

C#
鑑於:
JSON.NET強類型對象從DynamicObject反序列化繼承/串行化

[JSONObject的(MemberSerialization.OptOut)]
公共類的客戶:DynamicObject {

公共字符串姓{get;組; }
public string LastName {get;組; }

}

的JavaScript:
VAR的客戶= {
姓: 「約翰」,
名字: 「李四」,
DOB: 「1984年12月18日」
};

是否有JSON.NET中的設置或其他必須發生的事情,以便在將json發佈到服務器時將DOB反序列化爲強類型Customer?

+0

你有沒有解決這個? –

+0

我還沒有解決這個問題。 –

回答

0

得到這個工作中使用自定義轉換器重寫ReadJson和WriteJson方法

公共類CustomConverter:JsonConverter {

public override void WriteJson(JsonWriter writer, 
            object value, 
            JsonSerializer serializer) 
    { 
     if (value is DynamicSword) 
     { 
      var ds = (DynamicSword)value; 
      string[] serializable; 
      string[] notSerializable; 
      ds.SetSerializableAndNotSerializable(out serializable, out notSerializable);     
      var jobject = new JObject(); 
      foreach (var item in serializable) 
      { 
       var tempValue = ds[item]; 
       if (tempValue != null) 
       { 
        jobject.Add(item, JToken.FromObject(tempValue)); 
       } 
      } 
      jobject.WriteTo(writer); 
     } 
     else 
     { 
      JToken t = JToken.FromObject(value); 
      t.WriteTo(writer); 
     } 
    } 


    public override bool CanConvert(Type objectType) 
    { 
     return true;  
    } 

    public override object ReadJson(JsonReader reader, 
            Type objectType, 
            object existingValue, 
            JsonSerializer serializer) 
    { 
     ConstructorInfo magicConstructor = objectType.GetConstructor(Type.EmptyTypes); 
     var newObject = magicConstructor.Invoke(new object[]{}); 
     JObject jObject = JObject.Load(reader); 
     if (newObject is DynamicSword) 
     { 
      var ds = (DynamicSword)newObject; 
      hydrate(jObject, ds); 
     } 
     else 
     { 
      //do something different? 
      //really shoulnt be in here anyways 
     } 
     return newObject; 
    } 

....

}

+0

這不是近乎完整的任何地方,但它顯示可以用JSON.NET完成,沒有太多的麻煩。 –

+0

[JsonConverter(typeof(CustomConverter))] public class TestClass1:DynamicSword 必須將JsonConverter的屬性放在類上。 –