2013-12-19 2 views
1
나는 다음과 같은 코드를 한

을 포함하지 않고 JSON에 익명 객체를 직렬화 주요 대상.어떻게 속성 이름

예 : 나는 그것을 직렬화하는 경우

OtherOptions = new { A = "1", B = "2" } 

, 그것은 것 (또는 같은 것을) :

OtherOptions: { 
A: "1", 
B: "2" 
} 

은 가능한 OtherOptions 동일한 수준하지 않고에서 A와 B를하는 것입니다 명시 적으로 제거합니다. 이 사전 것을 직렬화 한 다음 원하는 단지 특성의 사전 생성하고, 기본적으로 ...

+1

짧은 대답 : 아니오. 객체 그래프를 사용하거나 사용자 객체 직렬화를 사용해야합니다. – user2864740

답변

2

확인이 단지 추한이고 나는 그 일을하지 않는 것이 좋습니다 그러나 당신이 원하는 것을. 직렬화

static void Main(string[] args) 
    { 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     var obj = new {Prop1 = "val1", OtherOptions = new {A = "1", B = "2"}}; 

     IDictionary<string, object> result = new Dictionary<string, object>(); 
     foreach (var kv in GetProps(obj)) 
     { 
      if (!kv.Key.Equals("OtherOptions")) 
       result.Add(kv); 
     } 
     foreach (var kv in GetProps(obj.OtherOptions)) 
     { 
      result.Add(kv); 
     } 
     var serialized = serializer.Serialize(result); 
    } 

    static IEnumerable<KeyValuePair<string, object>> GetProps(object obj) 
    { 
     var props = TypeDescriptor.GetProperties(obj); 
     return 
      props.Cast<PropertyDescriptor>() 
       .Select(prop => new KeyValuePair<string, object>(prop.Name, prop.GetValue(obj))); 
    } 

{"Prop1":"val1","A":"1","B":"2"} 

당신은 당신이 존재하는 경우 반환 무시하고 GetProps 방법에서 그 속성에 대해 확인하지 할 필드에 속성을 사용할 수 있습니다됩니다.

이번에도 권장하지 않습니다.