小编tri*_*dev的帖子

在使用Json.NET进行序列化期间为所有类添加自定义类型名称

我需要为我使用Json.Net序列化的每个对象添加一个'type'属性.我知道Json.Net已经支持这个开箱即用,但在我的情况下,类型名称需要排除程序集,并且属性的名称必须是可配置的(两者都不受支持).

我目前有这个:

public class TypeConverter : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serialiser)
    {
        JObject jObject = JObject.FromObject(value, serializer);
        jObject.AddFirst(new JProperty("myCustomTypePropertyName"), value.GetType().Name);
        jObject.WriteTo(writer);
    }

    public override void ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serialiser)
    {
        throw new NotImplementedException();
    }

    public override bool CanConvert(Type objectType)
    {
        return objectType.IsClass;
    }
}
Run Code Online (Sandbox Code Playgroud)

这适用于正在序列化的外部类型,但遗憾的是没有为嵌套对象调用转换器.如果我将序列化器添加到JObject.FromObject调用中,那么我会尝试重新进入外部类型的转换器时出现自引用循环异常.

我可以解决这个问题的唯一方法是手动反映和迭代每个级别的属性,并使用serializer参数对它们进行序列化,但即使在考虑性能之前,它也非常难看.

我很感激对此的一些帮助; 我希望我遗漏了一些明显的东西.

(注意:我正在运行.NET 3.5,因此SerializationBinder是不可能的.)

.net c# serialization json.net

5
推荐指数
1
解决办法
1486
查看次数

如何将Button命令绑定到成员方法?

我在我的MVVM WPF实现中有一个ListView,它有一个带有按钮的DataTemplate.ListView绑定到ViewModel中的一组复杂对象.

 <ListView ItemsSource="{Binding Path=ComplexObjects}"
          SelectedItem="{Binding Path=SelectedObject}"
          Width="Auto">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="My Property">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Margin="6,2,6,2">
                            <TextBlock Text="{Binding MyProperty}"/>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
    </GridViewColumn>
            <GridViewColumn Header="First Name">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <StackPanel Margin="6,2,6,2">
                            <Button Command="{Binding ???}"/>
                        </StackPanel>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
    </GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)

所有文本字段都没有问题,但是我可以将Button Command绑定到ComplexObject的成员方法吗?如果是这样,有什么方法可以传递参数?

我有一种感觉,我可能只是在逃避使用ICommand.

谢谢.

c# data-binding wpf listview mvvm

2
推荐指数
1
解决办法
9492
查看次数

标签 统计

c# ×2

.net ×1

data-binding ×1

json.net ×1

listview ×1

mvvm ×1

serialization ×1

wpf ×1