我有一个包含大量信息的庞大课程。我想要打印到JSON的一些信息,但不是所有信息。当我将Object序列化为JSON时,它会打印所有信息。
所以我认为我为我想要用JSON打印的数据创建了一个模板类。然后我想复制原始类中模板中存在的所有值,并跳过其余的。然后我可以序列化该模板类。
现在我尝试完成的是将数据从place
复制到placeJSON
。
我以为我应该遍历placeJSON
中的所有属性,如果place
中存在相同的属性名称,那么我应该复制该值。但是还需要对像Country
这样的嵌套类进行处理。
这怎么可能呢?
答案 0 :(得分:0)
我开始编写解决方案并在此处分享。它可能还没有完美,但它是一个开始。
Public Shared Function mergeObjectInTemplatedata(template As Object,
source As Object,
Optional parents As List(Of String) = Nothing) As Object
If parents Is Nothing Then
parents = New List(Of String)
End If
For Each prop As PropertyInfo In template.GetType().GetProperties()
Dim value As Type = prop.GetValue(template).GetType()
If value = GetType(String) Or value = GetType(Integer) Then
prop.SetValue(template, getFromSource(source, parents, prop.Name))
Else
parents.Add(prop.Name)
mergeObjectInTemplatedata(prop.GetValue(template), source, parents)
End If
Next
Return template
End Function
Private Shared Function getFromSource(source As Object,
location As List(Of String),
propertyName As String) As Object
Dim obj As Object = source
For Each item As String In location
obj = CallByName(obj, item, CallType.Get)
Next
Return CallByName(obj, propertyName, CallType.Get)
End Function
答案 1 :(得分:0)
您是否有理由不创建新的匿名类型来序列化为JSON?
例如(我只知道C#,而不是VB,问题被标记为C#,所以我希望这是可用的!):
class Place {
public string Name { get; set; }
public CountryItem Country { get; set; }
//other properties...
public object ToPlaceJson() {
return new { name = Name, country = Country };
}
}