标签: jsonserializer

ServiceStack JsonSerializer在继承时不会序列化对象成员

我正在尝试使用ServiceStack.Redis,我注意到当我存储一个对象的成员是从另一个对象继承的对象并尝试稍后获取它时,我得到null.

我查了一下,发现ServiceStack.Redis正在使用ServiceStack.JsonSerializer,所以我试图创建一个测试用例:

class Program
{
    public class ClassA
    {
        public string Id;

        public Dictionary<string, ClassB> dic = new Dictionary<string, ClassB>();
    }

    public class ClassB
    {
        public string Id;   
    }

    public class ClassC : ClassB
    {
        public object C;
    }

    public class ClassD
    {
        public string Id;
    }

    static void Main(string[] args)
    {
        ClassA t = new ClassA();
        t.Id = Guid.NewGuid().ToString("n");
        t.dic.Add("AAA", new ClassC());
        t.dic["AAA"].Id = Guid.NewGuid().ToString("n");
        ((ClassC)t.dic["AAA"]).C = new ClassD();
        ((ClassD)((ClassC)t.dic["AAA"]).C).Id = Guid.NewGuid().ToString("n");

        ServiceStack.Text.JsConfig.IncludeNullValues = true;
        ServiceStack.Text.JsConfig.IncludePublicFields = true;
        ServiceStack.Text.JsConfig.IncludeTypeInfo …
Run Code Online (Sandbox Code Playgroud)

c# serialization json jsonserializer servicestack

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

无法将当前JSON数组(例如[1,2,3])反序列化为具有复杂和嵌套对象的类型

我正在尝试为复杂的对象构建web api.为此,我构建了自定义绑定器,从JSON反序列化此对象.

我的客户活页夹看起来像:

var paramType = p_BindingContext.ModelType;

    dynamic updatedParam = Activator.CreateInstance(paramType);

    JsonReader reader = new JTokenReader(JObject.Parse
    (p_ActionContext.Request.Content.ReadAsStringAsync().Result));

    JObject jObject = JObject.Load(reader);

    JsonSerializer serializer = new JsonSerializer();

    serializer.Populate(jObject.CreateReader(), updatedParam);//Here the exception thorws

    p_BindingContext.Model = updatedParam; 
Run Code Online (Sandbox Code Playgroud)

序列化的对象非常复杂:

          public class ModelRegisterUserRequest{

              public ModelUser User { get; set; }

    public CampaignItem CampaignWithChosenProposal { get; set; }

    public string ValidationToken { get; set; }

    public string IVRToken { get; set; }

    public string DealerID { get; set; }

    public string SalePersonID { get; set; } …
Run Code Online (Sandbox Code Playgroud)

c# jsonserializer json.net asp.net-web-api

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

ServiceStack的JsonSerializer可以序列化私有成员吗?

我关心的主要是ServiceStack的Redis客户端.我有一堆实体要存储在缓存中.他们的成员大多是封装的(私有的),其中一些没有任何公共访问者.ServiceStack的序列化程序是否允许我在Redis中存储(并显然获得)这些实体?或者我是否必须创建具有序列化公共属性的"干净"POCO类,这将迫使我保留任何实体的2个表示形式:真实的,以及用于将其存储在Redis中的"假"POCO表示形式?

我希望答案不是后者:)

jsonserializer redis servicestack

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

Json Formatting.Indented使用Web Api Controller,ASP.NET MVC

我为web api收集了名称,短语,地理定位图像信息的json数据.通过我的代码,我可以生成JSON数据/ api/wiki/name.但我不能格式化数据.当我想将它保存在一个文件中时,它存储在一行中.我试图在返回结果中写入Formatting.Indented,但它显示错误.我的代码看起来像这样 -

 public class WikiController : ApiController
{
    public JsonResult<PoiInfo> Get(string id)
    {
        WebClient client = new WebClient();
        var TextResponse = client.DownloadString("https://en.wikipedia.org/w/api.php?format=json&action=query&prop=extracts&exlimit=max&explaintext&exintro&titles=" + id + "&redirects=");
        var ImageResponse = client.DownloadString(new Uri("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=pageimages&pithumbsize=400&titles=" + id));
        var GeoResponse = client.DownloadString("https://en.wikipedia.org/w/api.php?action=query&format=json&prop=coordinates&titles=" + id);


        var TextResponseJson = JsonConvert.DeserializeObject<Rootobject>(TextResponse);
        var TextfirstKey = TextResponseJson.query.pages.First().Key;
        var Text = TextResponseJson.query.pages[TextfirstKey].extract;
        Regex regex = new Regex(@".(?<=\()[^()]*(?=\)).(.)");
        string.Format("Before:{0}", Text);
        Text = regex.Replace(Text, string.Empty);
        string TextResult = String.Format(Text);
        TextResult = Regex.Replace(TextResult, @"\\n", " ");

        var ImgresponseJson = JsonConvert.DeserializeObject<ImgRootobject>(ImageResponse);
        var ImgfirstKey …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc formatting jsonserializer asp.net-web-api

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

Play Framework - 如何忽略Json序列化的某些字段?

我有案例课

case class User (
  id: Option[Long] = None,
  username: String,     
  password: Option[String] = None,
)
Run Code Online (Sandbox Code Playgroud)

这个案例类是json serialiser

object User {
  implicit val userWrites: Writes[User] = (
      (JsPath \ "id").write[Option[Long]] and
      (JsPath \ "username").write[String] and     
      (JsPath \ "password").write[Option[String]] and
    )(unlift(User.unapply))
}
Run Code Online (Sandbox Code Playgroud)

但我不想在api响应中公开密码字段.我怎样才能实现它?

我也使用这个用于Slick在适当的表中读/写数据,我在许多地方,服务层,控制器层使用它,我不想为api响应创建单独的类(没有密码).

jsonserializer playframework

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

如何防止 Newtonsoft JsonSerializer 关闭流?

所以我还没有编写我现在正在处理的代码,我正在寻找如何最好地处理这个问题。

现在我有这个。

public static void WriteSymbol(Stream stream, Symbol symbol)
{
    using (var streamWriter = new StreamWriter(stream))
    {
        JsonSerializer.Create(SerializerSettings).Serialize(streamWriter, symbol);                
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的测试中完成此操作后,我希望能够读取流的内容,以便我可以检查集成。问题是现在在 Serialize 流关闭后我无法再读取它。

我看到了 JsonWriter,public bool CloseOutput { get; set; }但我没有看到这个静态 JsonSerializer 的内容。

解决这个问题的最佳方法是什么?如何防止序列化程序关闭流?有什么方法可以检查流的内容吗?

c# stream streamwriter jsonserializer json.net

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

使用C#中的Json.net格式化Json

我试图将一堆XML文件解析为一个已经正常工作的JSON文件.

最终的JSON文件如下所示:

{
"items": [
    {
        "subItems": [
            {
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            },
            {
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            }
        ]
    },
    {
        "subItems": [
            {
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            },
            {
                "Name": "Name",
                "Value": "Value",
                "Type": "text"
            },
...
Run Code Online (Sandbox Code Playgroud)

相反,我想实现以下结构:

{
"items": [
    [   
        {
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        },
        {
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        }

    ],
    [
        {
            "Name": "Name",
            "Value": "Value",
            "Type": "text"
        },
        {
            "Name": "Name", …
Run Code Online (Sandbox Code Playgroud)

c# json jsonserializer json.net json-serialization

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

如何将JSON映射到java模型类

我需要将JSONobj 映射到一个类及其数组ArrayList,Android并且它应该包含所有子数据.(也有嵌套的arraylists),我需要再次将更新的数据列表转换为jsonobject

我的json字符串是

  {
    "type": "already_planted",
    "crops": [
      {
        "crop_id": 1,
        "crop_name": "apple",
        "crop_details": [
          {
            "created_id": "2017-01-17",
            "questions": [
              {
                "plants": "10"
              },
              {
                "planted_by": "A person"
              }
            ]
          },
          {
            "created_id": "2017-01-30",
            "questions": [
              {
                "plants": "15"
              },
              {
                "planted_by": "B person"
              }
            ]
          }
        ]
      },
      {
        "crop_id": 2,
        "crop_name": "Cashew",
        "crop_details": [
          {
            "created_id": "2017-01-17",
            "questions": [
              {
                "plants": "11"
              },
              {
                "planted_by": "c person"
              }
            ]
          }
        ] …
Run Code Online (Sandbox Code Playgroud)

java android json jsonserializer gson

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

@JsonInclude(Include.NON_EMPTY) 在使用 CUSTOM SERIALIZER 时不起作用

似乎当我使用自定义序列化程序时,它@JsonInclude(Include.NON_NULL)会被完全忽略。

我的要求是不要序列化值为空的键。我还想通过为多值添加空格分隔符来格式化字符串SortedSet(这就是我创建自定义序列化程序的原因)

没有任何空值的电流输出示例

{
  "age": "10",
  "fullName": "John Doe"
  "email":"doe@john.com john@doe.com test@gmail.com"
}
Run Code Online (Sandbox Code Playgroud)

具有空值的电流输出示例

{
  "age": "10",
  "fullName": "John Doe"
  "email":null
}
Run Code Online (Sandbox Code Playgroud)

电子邮件为空时的预期输出:

{
  "age": "10",
  "fullName": "John Doe"
}
Run Code Online (Sandbox Code Playgroud)

DTO

@AllArgsConstructor
@Builder
@Data
@NoArgsConstructor
@ToString
@SuppressWarnings("PMD.TooManyFields")
public class User {
    @JsonProperty("age")
    private String age;

    @JsonProperty("firstName")
    private String name;

    @JsonProperty("email")
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @JsonSerialize(using = MultiValuedCollectionSerializer.class)
    private SortedSet<String> email;
}
Run Code Online (Sandbox Code Playgroud)

自定义序列化程序

public class MultiValuedCollectionSerializer extends JsonSerializer<Collection> {

    @Override
    public void serialize(final Collection inputCollection, 
                          final JsonGenerator jsonGenerator, 
                          final SerializerProvider …
Run Code Online (Sandbox Code Playgroud)

java json jsonserializer java-11

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

Swagger UI 不使用 Newtonsoft.Json 来序列化十进制,而是使用 System.Text.json

当以下 POCO 类的“Salary”字段的十进制值为 12000M(十进制值)时,Swagger UI 将 JSON 属性值显示为 12000。而预期的 JSON 属性值为 12000.0(即尾随零)

在startup.cs的“ConfigureServices(IServiceCollection services)”方法中使用以下代码:

services.AddControllers().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
    options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
});
services.AddControllersWithViews().AddNewtonsoftJson(options =>
{
    options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
    options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
});
Run Code Online (Sandbox Code Playgroud)

还使用了以下代码片段,但 Swagger UI 中没有出现预期的输出。(在 Swashbuckle.AspNetCore.Newtonsoft V6.1.4.0 中)

services.AddAwaggerGenNewtonsoftSupport();
Run Code Online (Sandbox Code Playgroud)

当上面的代码片段不起作用时,也尝试以下。但没有运气。

services.AddMvc().AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.FloatParseHandling = FloatParseHandling.Decimal;
        options.SerializerSettings.FloatFormatHandling = FloatFormatHandling.DefaultValue;
    });
Run Code Online (Sandbox Code Playgroud)

班级:

public class Employee{
   public string EmployeeName {get; set;}
   public decimal Salary {get; set;}
   public string Department {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

看起来,即使添加上述代码片段后,Swagger UI 也没有使用 Newtonsoft.Json 来序列化十进制,而是使用 …

jsonserializer json.net swagger-ui asp.net-core system.text.json

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