小编Vro*_*del的帖子

使用DataContractJsonSerializer将Dictionary <TKey,TValue>序列化为JSON

我有一个对象树,我正在序列化为JSON DataContractJsonSerializer.Dictionary<TKey, TValue>得到序列化但我不喜欢标记 - 项目不会像这样呈现:

{key1:value, key2:value2}
Run Code Online (Sandbox Code Playgroud)

而是像一系列序列化KeyValuePair<TKey, TValue>对象:

[{
    "__type":"KeyValuePairOfstringanyType:#System.Collections.Generic",
    "key":"key1",
    "value":"value1"
 },     
 {
    "__type":"KeyValuePairOfstringanyType:#System.Collections.Generic",
    "key":"key2",
    "value":"value2"
 }]
Run Code Online (Sandbox Code Playgroud)

丑,不是吗?

因此,我通过将通用Dictionary包装在实现的自定义对象中来避免这种情况ISerializable,并且我在GetObjectData方法中实现了自定义序列化(并且它只需要3行).

现在的问题-我不能让我的类从派生Dictionary<TKey, TValue>,所以我实现所有的逻辑(Add,Clear,等),在我的自定义类,被应用到私人Dictionary<TKey, TValue>领域.继承会更好,因为在使用我的自定义对象时,我将拥有所有通用字典功能.

继承的问题是它自己的Dictionary<TKey, TValue>实现ISerializable,并且DataContractJsonSerializer似乎更喜欢这个实现,即使我ISerializable从我的自定义类显式实现,如下所示:

public class MyClass : Dictionary<string, object>, ISerializable
{
    public override void GetObjectData(SerializationInfo info, 
        StreamingContext context)
}
Run Code Online (Sandbox Code Playgroud)

我真的很惊讶这是可能的,因为它允许我实现相同的接口两次而不显然能够使用显式接口实现 - 所以我在一篇关于多接口实现的博客文章中更详细地分析了这种情况

所以,根据我在那里做的实验,序列化器应该调用我的ISerializable实现,无论内部使用什么类型的转换 -

((ISerializable)((Dictionary<,>)obj)).GetObjectData(...)
Run Code Online (Sandbox Code Playgroud)

要么:

((ISerializable)obj).GetObjectData(...)
Run Code Online (Sandbox Code Playgroud)

但它显然没有发生,因为我在生成的JSON中看到KeyValuePair<TKey, TValue> …

.net oop serialization multiple-interface-implem datacontractjsonserializer

15
推荐指数
1
解决办法
3161
查看次数

如何获取System.Web.Http.Tracing.dll?

我在这里阅读了有关自己的TraceWriter实现的Web API,例如此处,以及其他来源.

我现在使用VS2013与.NET 4.5.1并且无法找到EnableSystemDiagnosticsTracing.它的意思是在HttpConfigurationTracingExtensions类中定义,该类驻留在System.Web.Http.Tracing.dll中.但是,无法找到此程序集 - 不在"添加引用"对话框中的程序集列表中,而不是在GAC中.

这个集会应该来自哪里?Docs说这是我安装的.NET Framework 4的一部分.还安装了ASP.NET Web API 2跟踪5.0.0 NuGet包.有更新吗?我应该重新安装.NET Framework吗?

我知道自己实现ITraceWriter并不是什么大问题,但是我不知道内置实现发生了什么.

asp.net diagnostics asp.net-web-api

12
推荐指数
2
解决办法
5946
查看次数

无法访问 AKS 上 LoadBalancer 类型的 Kubernetes 服务

我正在使用 ACR 容器注册表创建一个普通的 AKS 集群并部署一个虚拟服务,我之前已经做过很多次了,应该可以工作,但事实并非如此 - 服务部署没有错误,我看到了 pod 和服务是活动的,端口似乎匹配 - 但我无法访问 Pod 中运行的应用程序。

这是我的 YAML 文件:

apiVersion: v1
kind: Service
metadata:
  name: dummyapp-prep
spec:
  selector:
    app: dummyapp-prep
  ports:
    - protocol: TCP
      port: 80
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dummyapp-prep
spec:
  selector:
    matchLabels:
      run: dummyapp-prep
  replicas: 1
  template:
    metadata:
      labels:
        run: dummyapp-prep
    spec:
      containers:
      - name: dummyapp-prep
        image: dummyappregistry.azurecr.io/dummyappregistry.azurecr.io/dummyapp-prep:dummyapp-prep-18
        ports:
        - containerPort: 80
      imagePullSecrets:
      - name: secret
Run Code Online (Sandbox Code Playgroud)

一切都部署得很好 - 我看到了该服务并且它获得了一个外部 IP:

kubectl get services
NAME            TYPE           CLUSTER-IP …
Run Code Online (Sandbox Code Playgroud)

yaml azure kubernetes azure-load-balancer azure-aks

3
推荐指数
1
解决办法
1616
查看次数