로직 개선
This commit is contained in:
@@ -23,11 +23,12 @@ namespace UVC.Data
|
||||
/// }");
|
||||
///
|
||||
/// // Mask 객체 (타입 지정용)
|
||||
/// var maskJson = JObject.Parse(@"{
|
||||
/// var maskJson = DataMask.Parse(@"{
|
||||
/// ""name"": """",
|
||||
/// ""age"": 0,
|
||||
/// ""isActive"": false
|
||||
/// }");
|
||||
/// maskJson.ObjectIdKey = "name"; // DataObject의 Id로 사용할 속성 지정
|
||||
///
|
||||
/// var mapper = new DataMapper(maskJson);
|
||||
/// DataObject result = mapper.Map(sourceJson);
|
||||
@@ -42,7 +43,7 @@ namespace UVC.Data
|
||||
private int maxRecursionDepth = 10;
|
||||
private int currentDepth = 0;
|
||||
|
||||
private JObject mask;
|
||||
private DataMask mask;
|
||||
|
||||
/// <summary>
|
||||
/// DataMapper 클래스의 새 인스턴스를 초기화합니다.
|
||||
@@ -52,7 +53,7 @@ namespace UVC.Data
|
||||
/// Mask 객체는 원본 JSON 객체와 동일한 구조를 가질 필요는 없지만,
|
||||
/// 변환하려는 속성들에 대한 타입 정보를 제공해야 합니다.
|
||||
/// </remarks>
|
||||
public DataMapper(JObject mask)
|
||||
public DataMapper(DataMask mask)
|
||||
{
|
||||
this.mask = mask;
|
||||
}
|
||||
@@ -93,10 +94,11 @@ namespace UVC.Data
|
||||
/// { ""name"": ""이영희"", ""age"": 25 }
|
||||
/// ]");
|
||||
///
|
||||
/// var maskJson = JObject.Parse(@"{
|
||||
/// var maskJson = DataMask.Parse(@"{
|
||||
/// ""name"": """",
|
||||
/// ""age"": 0
|
||||
/// }");
|
||||
/// maskJson.ObjectIdKey = "name"; // DataObject의 Id로 사용할 속성 지정
|
||||
///
|
||||
/// var mapper = new DataMapper(maskJson);
|
||||
/// DataArray result = mapper.Map(sourceArray);
|
||||
@@ -147,7 +149,7 @@ namespace UVC.Data
|
||||
/// }
|
||||
/// }");
|
||||
///
|
||||
/// var maskJson = JObject.Parse(@"{
|
||||
/// var maskJson = DataMask.Parse(@"{
|
||||
/// ""user"": {
|
||||
/// ""name"": """",
|
||||
/// ""address"": {
|
||||
@@ -156,21 +158,22 @@ namespace UVC.Data
|
||||
/// }
|
||||
/// }
|
||||
/// }");
|
||||
/// maskJson.ObjectIdKey = "user"; // DataObject의 Id로 사용할 속성 지정
|
||||
///
|
||||
/// var mapper = new DataMapper(maskJson);
|
||||
/// var result = mapper.Map(sourceJson);
|
||||
/// // result는 sourceJson과 동일한 중첩 구조를 유지
|
||||
/// </code>
|
||||
/// </example>
|
||||
private DataObject MapObject(JObject sourceObject, JObject maskObject, int depth = 0)
|
||||
private DataObject MapObject(JObject sourceObject, DataMask maskObject, int depth = 0)
|
||||
{
|
||||
if (depth >= maxRecursionDepth)
|
||||
{
|
||||
// 깊이 제한에 도달하면 간소화된 처리
|
||||
return new DataObject(sourceObject);
|
||||
return new DataObject(sourceObject) { IdKey = maskObject.ObjectIdKey, Name = maskObject.ObjectName };
|
||||
}
|
||||
|
||||
DataObject target = new DataObject();
|
||||
DataObject target = new DataObject() { IdKey = maskObject.ObjectIdKey, Name = maskObject.ObjectName };
|
||||
foreach (var property in sourceObject.Properties())
|
||||
{
|
||||
if (maskObject.ContainsKey(property.Name))
|
||||
@@ -181,7 +184,7 @@ namespace UVC.Data
|
||||
// 중첩된 객체 처리
|
||||
if (sourceValue.Type == JTokenType.Object && maskValue.Type == JTokenType.Object)
|
||||
{
|
||||
target[property.Name] = MapObject((JObject)sourceValue, (JObject)maskValue, depth + 1);
|
||||
target[property.Name] = MapObject((JObject)sourceValue, (DataMask)maskValue, depth + 1);
|
||||
}
|
||||
// 중첩된 배열 처리
|
||||
else if (sourceValue.Type == JTokenType.Array && maskValue.Type == JTokenType.Array)
|
||||
@@ -191,7 +194,12 @@ namespace UVC.Data
|
||||
}
|
||||
else
|
||||
{
|
||||
MapProperty(property.Name, sourceValue, maskValue, target);
|
||||
string propertyName = property.Name;
|
||||
if(maskObject.NamesForReplace != null && maskObject.NamesForReplace.ContainsKey(propertyName))
|
||||
{
|
||||
propertyName = maskObject.NamesForReplace[propertyName];
|
||||
}
|
||||
MapProperty(propertyName, sourceValue, maskValue, target);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -265,11 +273,12 @@ namespace UVC.Data
|
||||
/// ]
|
||||
/// }");
|
||||
///
|
||||
/// var maskJson = JObject.Parse(@"{
|
||||
/// var maskJson = DataMask.Parse(@"{
|
||||
/// ""contacts"": [
|
||||
/// { ""type"": """", ""number"": """" }
|
||||
/// ]
|
||||
/// }");
|
||||
/// maskJson.ObjectIdKey = "contacts"; // DataObject의 Id로 사용할 속성 지정
|
||||
///
|
||||
/// var mapper = new DataMapper(maskJson);
|
||||
/// var result = mapper.Map(sourceJson);
|
||||
@@ -296,7 +305,7 @@ namespace UVC.Data
|
||||
|
||||
if (sourceItem.Type == JTokenType.Object && maskTemplate != null && maskTemplate.Type == JTokenType.Object)
|
||||
{
|
||||
results[i] = MapObject((JObject)sourceItem, (JObject)maskTemplate);
|
||||
results[i] = MapObject((JObject)sourceItem, (DataMask)maskTemplate);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -351,7 +360,7 @@ namespace UVC.Data
|
||||
|
||||
if (sourceItem.Type == JTokenType.Object && maskTemplate.Type == JTokenType.Object)
|
||||
{
|
||||
targetArray.Add(MapObject((JObject)sourceItem, (JObject)maskTemplate));
|
||||
targetArray.Add(MapObject((JObject)sourceItem, (DataMask)maskTemplate));
|
||||
}
|
||||
else if (sourceItem.Type == JTokenType.Array && maskTemplate.Type == JTokenType.Array)
|
||||
{
|
||||
@@ -408,7 +417,7 @@ namespace UVC.Data
|
||||
/// }");
|
||||
///
|
||||
/// // Mask 객체 설정 (열거형 포함)
|
||||
/// var maskJson = new JObject();
|
||||
/// var maskJson = new DataMask();
|
||||
/// maskJson["name"] = "";
|
||||
/// maskJson["age"] = 0;
|
||||
/// maskJson["height"] = 0.0;
|
||||
@@ -416,6 +425,8 @@ namespace UVC.Data
|
||||
/// maskJson["birthDate"] = JToken.FromObject(DateTime.Now);
|
||||
/// maskJson["status"] = JToken.FromObject(UserStatus.Inactive);
|
||||
///
|
||||
/// maskJson.ObjectIdKey = "name"; // DataObject의 Id로 사용할 속성 지정
|
||||
///
|
||||
/// var mapper = new DataMapper(maskJson);
|
||||
/// var result = mapper.Map(sourceJson);
|
||||
/// // result에는 모든 속성이 적절한 타입으로 변환됨
|
||||
|
||||
Reference in New Issue
Block a user