【问题标题】:Json.Net serialize/deserialize Class Name attribute C#Json.Net 序列化/反序列化类名属性 C#
【发布时间】:2016-11-25 15:12:51
【问题描述】:

对于这个(也许)微不足道的问题,我很抱歉,但我正在尝试使用一个 Web 服务,其中实体和我的数据模型类的名称不同。

我想保留我的模型 .Net 类名称并使用 Json 属性名称来映射序列化器/反序列化器和相应的 Web 服务实体。 例如:

网络服务实体:

“人”

我的模型课:

“员工”

我已经做了什么:

[JsonObject(Title="People")]
public class Employee 
{

   [JsonProperty("DifferentPropertyName")]
   string propertyName1 { get; set; }
}

但是json序列化器/反序列化器继续使用.Net类名,我需要设置jsonObject Title。

有办法实现吗?

编辑

我正在开发 Xamarin Forms 应用,使用 Simple.OData.Client 来使用 OData 服务

谢谢

【问题讨论】:

  • 也许这会有所帮助:stackoverflow.com/questions/13839426/…
  • 也许这会有所帮助:[JsonProperty(Title="People")] public string propertyName1{get; set;}
  • 请显示做错事的序列化/反序列化代码。
  • 谢谢...问题不在于属性,而在于类名。当我使用 simple.odata.client nuget 包时,我试图将名为“People”的资源实体反序列化为名为“Employee”的 .net 类(模型)。此时,simple.odata.client 会查找名为“Employee”的服务资源(实体),但找不到。
  • 您是否尝试过先序列化为 JSON 字符串,然后将该字符串反序列化到您的 Employee 类中?可能不利于性能,但这是一种解决方法。

标签: c# json serialization xamarin.forms simple.odata.client


【解决方案1】:

DataContractAttribute 可能是您的解决方案。

public class RichFilter
{
   public Trolo item { get; set; }
}
[DataContract(Name = "item")]
public class Trolo 
{ 
   public string connector { get; set; } 
}

如果你序列化一个 RichFilter 对象,这里是输出:

{"item":{"connector":"AND"}}

【讨论】:

  • 在使用DataContractAttribute 时,您必须同时在properties you want to serialize 上指定DataMemberAttribute
  • 由于我使用的是 Simple.OData.Client,它无法识别 DataContract 属性,因此我必须明确传递远程元素的名称。无论如何,我使用了一个自定义属性,比如“ClassName”,它带有一个返回类名的属性,但这对于它的目的来说工作量太大了。
猜你喜欢
  • 2021-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多