在已知对象

时间:2017-02-07 15:44:45

标签: c# json serialization

我的情况是,我的web api接收带有一系列属性值的对象,这些属性值包含一堆静态元数据以及可以是任何内容的唯一值。例如,在我的属性值列表中,可能存在一个名为start time的属性,该对象将具有一个名为PropertyType的属性,其值为" System.DateTime",以及唯一值将只是" 2017年2月7日11:00 AM"例如。我也可能有另一个名为Backup文件夹的属性值,它的PropertyType值为" MyProject.MyNamespace.Folder"并且唯一值将是我序列化的Folder对象,它看起来像这样

{\"$type\":\"MyProject.MyNamespace.Folder,\"m_FolderID\":6,\"m_FolderName\":\"Development\"}

以下是简单类型的JSON:

{
  "propertyName": "AllowEntry",
  "categoryName": "User Interface",
  "displayName": "AllowEntry",
  "propertyId": 19,
  "typeName": "System.Boolean",
  "typeNameSSO": "",
  "toolTip": "",
  "description": "When set to true, the user is allowed to modify the value of the parameter when the job is manually submitted.",
  "editor": "",
  "mergeOption": 1,
  "sortOrder": 1,
  "inheritedFromType": 0,
  "inheritedFromId": 0,
  "inheritedFromName": null,
  "defaultValue": null,
  "currentValue": "true"
}

这就是JSON对自定义类型的看法

{
  "propertyName": "BackupFolder",
  "categoryName": "Query",
  "displayName": "Folder",
  "propertyId": 52,
  "typeName": "MyProject.MyNamespace.Folder",
  "typeNameSSO": "MyProject.MyNamespace.FolderSSO",
  "toolTip": "",
  "description": "Select a folder",
  "editor": "",
  "mergeOption": 1,
  "sortOrder": 6,
  "inheritedFromType": 0,
  "inheritedFromId": 0,
  "inheritedFromName": null,
  "defaultValue": null,
  "currentValue": "{\"$type\":\"MyProject.MyNamespace.Folder, \"m_FolderID\":6,\"m_FolderName\":\"Development\"}"
}

我想知道如何查看这些属性值并在嵌套Json而不是简单值时反序列化currentValue信息?

我一直在尝试使用CustomCreationConverter,但我不知道如何捕获属性值对象的值并开始更改它。

这是我的代码:

public class PropertyValueJsonConverter : CustomCreationConverter<PropertyValue>
{
    public override PropertyValue Create(Type objectType)
    {            
        return new PropertyValue();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        try
        {
            object obj = new object();
            if (reader.TokenType == JsonToken.StartObject)
            {
                obj = serializer.Deserialize(reader, objectType);
            }
            return obj;
        }
        catch (System.Exception ex)
        {
            Debug.WriteLine(ex);
        }
        return null;
    }
}

我得到一个StackOverflowException,没有对异常的解释,而且existingObject值为null,我不确定还有什么。

有什么想法吗?

0 个答案:

没有答案