小编Bri*_*ers的帖子

在 Newtonsoft JSON.NET 架构中禁用空类型

我有一个 MVC 应用程序,它将我的模型序列化为 json 模式(使用 Newtonsoft json.net 模式)。问题是我的数组中的项目有 type ["string", "null"],但我需要的只是"string". 这是我班级的代码:

public class Form
{
    [Required()]
    public string[] someStrings { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是由 Json.net 架构制作的架构:

"someStrings": {
  "type": "array",
  "items": {
    "type": [
      "string",
      "null"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

虽然我期待这个:

"someStrings": {
  "type": "array",
  "items": {
    "type": "string"        
  }
}
Run Code Online (Sandbox Code Playgroud)

请帮我摆脱那个“空”。

.net c# json json.net jsonschema

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

使用Json.Net序列化模型时自动自动HtmlEncode字符串

有没有一种方法可以将Json.Net配置为自动编码所有字符串,例如HtmlEncode(myString)在对模型进行序列化时?

c# serialization html-encode json.net

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

Cosmos DB 在查询中不尊重 Json.Net CamelCaseNamingStrategy

我正在 .Net 中为 Cosmos DB 创建一个存储库,为了保持 DRY 并避免用 装饰每个类属性[JsonProperty(PropertyName = "thePropertyName")],我用 .Net 装饰了我的类 [JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]

CreateDocumentAsync(例如)使用属性的驼峰式大小写名称正确序列化 JSON 格式的 Cosmos DB 文档。到目前为止,一切都很好。

然而,我的问题是,当我通过 LINQ 查询 Cosmos DB 时,它生成的用于查询 COSMOS DB 的 SQL 不尊重[JsonObject(NamingStrategyType = typeof(CamelCaseNamingStrategy))]装饰类的属性,因此不会返回任何文档。这是因为 Cosmos DB 查询对于字段/属性名称区分大小写。例如,以下命令会产生不同的结果(请注意名称的大小写差异):

SELECT * FROM c WHERE c.name = "Health"
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM c WHERE c.Name = "Health" 
Run Code Online (Sandbox Code Playgroud)

我通过检查 生成的查询 SQL 确认了这一点CreateDocumentQuery,并寻找了可以允许我指示属性名称大小写的选项,但SqlQuerySpec没有成功。

所以,我的问题是:有谁知道如何在 Cosmos Db 中使用类定义的驼峰式大小写策略进行 LINQ 查询,而不必通过[JsonProperty(PropertyName = "thePropertyName")].

预先感谢大家的帮助。

c# linq json json.net azure-cosmosdb

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

如何将集合(带有索引器属性)序列化为字典

我有一个类,FooCollection比方说,它实现了IEnumerable<Foo>,并且还提供了一个索引器,通过它可以Foo按名称查找a .在功能上它只是字典的只读.但它并不是真正的字典,因为用户无法决定密钥.

无论如何,我希望JSON.NET将此对象序列化为JSON字典,而不是现在正在执行的数组.坚持JsonDictionaryAttribute它不起作用:然后它什么都不做.

线索?

c# json.net

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

在使用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
查看次数

重复序列化和反序列化会创建重复项

大家好我的json serealization问题.我在Unity下使用Json.NET包:我正在搜索一个数据库,可以在我的应用程序上编辑,并通过wwwForm和一个php文件存储在我的服务器上.我没有问题来创建它并将其推到网上.问题是,当我加载它时,数据库最后有一个新条目.数据库类是这样的:

public class Database   {
    public List<Army> armies { get; set;}

    public Database() {
        armies = new List<Army>();
        armies.Add (new Army());
    }
}

public class Army
{
    public string faction { get; set;}
    public List<Unit> army { get; set;}

    public Army()
    {
        faction = "RED";
        army = new List<Unit>();
        army.Add (new Unit());
    }
}

public class Unit
{
    public string name { get; set;}
    public float fissionTimer { get; set;}
    public float HP { get; set;}
    public int shield …
Run Code Online (Sandbox Code Playgroud)

c# serialization json json.net unity-game-engine

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

Android原生广告adob

我一直在尝试从admob实施原生广告.

我从Github那里得到了一些示例代码.我试图实现这个代码,演示代码工作正常.原生广告正确显示.

然后我创建了自己的Admob帐户并获得了一个Ad Unit ID.以前的原生广告演示代码无法使用此ID,但我收到了错误代码错误,0尽管我创建Ad Unit ID的横幅广告效果很好.

有人可以帮我吗?

android admob

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

使用JSON填充现有对象

我使用Json.Net填充类,如下所示:

var account = JsonConvert.DeserializeObject<Account>(result.ToString());
Run Code Online (Sandbox Code Playgroud)

上面的结果JSON字符串填充了我的Account类中的几个属性.我后来有一个新的JSON字符串,并希望Account用剩余的属性填充相同的类.这可能使用JSON.NET或JsonConvert方法吗?我基本上想要添加/添加到我在上面的代码行中填充的帐户对象.

我的课:

public class Account
{
    public string CID { get; set; }            
    public string jsonrpc { get; set; }
    public string id { get; set; }
    public List<string> mail { get; set; }
    public List<string> uid { get; set; }
    public List<string> userPassword { get; set; }            
}
Run Code Online (Sandbox Code Playgroud)

c# json json.net json-deserialization

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

使用 JSON.NET 有条件地将 JSON 字符串或数组属性反序列化为 C# 对象?

我有一个基于从第三方 API 获取的非常复杂的 JSON 定义的 C# 对象。这是其中的一部分:

{"alarmSummary":"NONE"}
Run Code Online (Sandbox Code Playgroud)

C# 中对应的属性是:

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

我将使用 JSON.NET 中的典型 JSONConvert 进行转换:

var alarms = JSONConvert.DeserializeObject<MyClass>(jsonString); 
Run Code Online (Sandbox Code Playgroud)

但是,API 将以这种格式将警报作为数组放置,如果没有任何警报作为字符串,则将其放置为“NONE”:

{"alarmSummary" : ["AHHH Something went wrong!!", "I'm on fire!!"]}
Run Code Online (Sandbox Code Playgroud)

这意味着在 C# 中它需要是:

public string[] alarmSummary {get; set;}
Run Code Online (Sandbox Code Playgroud)

如果可以的话,我会让 JSONConvert 将“NONE”字符串反序列化为只有一个条目的数组。有没有办法为此属性设置条件,或者我必须获取整个复杂的 JSON 字符串并手动转换它?

.net c# serialization json json.net

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

将鼠标指针移动到选项卡按钮带您的位置 C#

这是我的第一篇文章,我尝试寻找解决方案,但无济于事。

我试图通过按下选项卡按钮来移动鼠标指针。IE。tab 选择下一个可选字段,我希望我的鼠标位于该可选字段上,以便鼠标通过点击 tab 在页面上移动。

否则,一种获取所选项目坐标并将其分配给鼠标的方法。

-更新信息被遗漏-

我的程序打开了另一个程序,我不确定如何引用该程序中出现问题的所选项目。

谢谢。

c# winforms

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