小编Mik*_* S.的帖子

在JSON.NET中自定义转换特定对象

我正在使用JSON.NET来序列化我的一些对象,我想知道是否有一种简单的方法来覆盖特定对象的默认json.net转换器?

目前我有以下课程:

public class ChannelContext : IDataContext
{
    public int Id { get; set; }
    public string Name { get; set; }
    public IEnumerable<INewsItem> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

JSON.NET目前序列化如上:

{
    "Id": 2,
    "Name": "name value",
    "Items": [ item_data_here ]
}
Run Code Online (Sandbox Code Playgroud)

是否可能只针对该特定类以这种方式格式化它:

"Id_2":
{
    "Name": "name value",
    "Items": [ item data here ]
}
Run Code Online (Sandbox Code Playgroud)

我是JSON.NET的新手..我想知道上面是否与编写自定义转换器有关.我无法找到关于如何写一个的具体例子.如果有人能指出我的具体来源,我会非常感激.

我需要找到一个解决方案,使特定类始终转换相同,因为上面的上下文是更大的上下文的一部分,JSON.NET默认转换器转换得很好.

希望我的问题足够明确......

更新:

我已经找到了如何创建一个新的自定义转换器(通过创建一个继承自JsonConverter的新类并覆盖它的抽象方法),我重写了WriteJson方法,如下所示:

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        ChannelContext contextObj = value as ChannelContext;

        writer.WriteStartObject();
        writer.WritePropertyName("id_" + contextObj.Id); …
Run Code Online (Sandbox Code Playgroud)

.net c# json json.net

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

微服务架构:跨服务数据共享

考虑以下针对在线商店项目的微服务:
用户服务保存有关商店用户的帐户数据(包括名字,姓氏,电子邮件地址等)

采购服务会跟踪用户购买的详细信息.

每项服务都提供用于查看和管理其相关实体的UI.购买服务索引页面列出了购买.每个购买项目应包含以下字段:
id,购买用户的全名,购买的商品标题和价格.
此外,作为索引页面的一部分,我想有一个搜索框让商店经理通过购买用户名来搜索购买.

我不清楚如何获取采购服务不具备的数据 - 例如:用户的全名.当尝试通过购买用户名来执行更复杂的搜索购买时,问题会变得更糟.

我想通过在用户创建时广播某种事件(并且只保存购买服务端的相关用户属性),我可以通过在两个服务之间同步用户来解决这个问题.从我的角度来看,这远非理想.当你有数百万用户时,你如何处理这个问题?你会在每个消费用户数据的服务中创建数百万条记录吗?

另一个明显的选择是在用户服务端公开API,它根据给定的ID返回用户详细信息.这意味着购买服务中的每个页面加载,我都必须调用用户服务才能获得正确的用户名.不理想,但我可以忍受它.

如何根据用户名实施购买搜索?我总是可以在Users Service端公开另一个API端点,它接收查询项,在Users Service中对用户名执行文本搜索,然后返回符合条件的所有用户详细信息.在采购服务中,将相关的ID映射回正确的名称并在页面中显示它们.这种方法也不理想.

我错过了什么吗?有没有其他方法来实现上述?也许我面临这个问题的事实是一种代码味道?我很乐意听到其他解决方案.

architecture web-services microservices

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

在Dictionary中使用IEqualityComparer与HashCode和Equals()的效率

我认为标题非常清楚.

我在想,如果有使用的时候是有一定效率的开销IEqualityComparerDictionary<K,V>提供一个当这是如何工作的?

谢谢

.net c# performance dictionary

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

实体框架 - 将第一个属性名称字母大写

通常,我倾向于使用以下驼峰大小写约定我的sql数据库列:

camelCase(注意第一个字母是小写的).

但是在使用C#时,我喜欢用以下约定命名对象的公共属性:

CamelCase(注意第一个是在uppwer的情况下).

实体框架的默认行为是将创建的类的属性命名为与它们在数据库中的相对列名相匹配.

是否有项目/解决方案级别的属性可以更改以解决此问题?

.net c# sql entity-framework

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

全局Java Servlet过滤器,有可能吗?

我正在为学术目的编写一个项目,其中包括其他不相关的内容,包括编写一个监视servlet/jsp响应时间的过滤器.

问题是过滤器应该适用于服务器中的每个已部署的Web应用程序,而不仅仅是特定的应用程序,我无法找到有关应用"全局"过滤器的任何信息.

它甚至可能吗?

注意:重要的是要提到我使用Apache Tomcat 7作为首选服务器.

谢谢!

米奇

java tomcat java-ee servlet-filters

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

Linq To XML,yield和其他人

我想知道是否有用于执行实体框架的.NET库或第三方工具,如XML文档上的LINQ查询.我知道已经有LINQ to XML,它允许你对一个ALREADY加载到内存中XDocument对象执行查询,但是如果XML Document的大小非常大(超过千兆字节)呢?

我想有一个选项将此查询XmlReader交给一个XDocument对象.这可能是开箱即用的吗?

.net c# linq linq-to-xml

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

实现接口时的C#协方差和逆变

我最近决定刷新我对C#基础知识的记忆,所以这可能是微不足道的,但我遇到了以下问题:

StringCollection在.NET v1.0中使用,以便为字符串创建强类型集合而不是object基于字符串ArrayList(后来通过包含泛型集合来增强):

快速浏览一下StringCollection定义,您可以看到以下内容:

// Summary:
//     Represents a collection of strings.
[Serializable]
public class StringCollection : IList, ICollection, IEnumerable
{
...
    public int Add(string value);
...
}
Run Code Online (Sandbox Code Playgroud)

你可以看到它实现IList,它包含以下声明(在其他一些声明中):

int Add(object value);
Run Code Online (Sandbox Code Playgroud)

但不是:

int Add(string value);
Run Code Online (Sandbox Code Playgroud)

我的第一个假设是,由于.NET框架协方差规则,它是可能的.

所以,为了确保,我尝试编写自己的实现IList和更改的类

int Add(object value);
Run Code Online (Sandbox Code Playgroud)

检索字符串类型而不是对象类型,但令我惊讶的是,在尝试编译项目时,我遇到了编译时错误:

does not implement interface member 'System.Collections.IList.Add(object)'
Run Code Online (Sandbox Code Playgroud)

有什么想法导致这个?

谢谢!

.net c# inheritance interface covariance

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

C#Lock语句

当一个线程试图进入一个关键部分并获得一个锁时,它实际上在做什么?

我问这个是因为我经常创建一个对象(对象类型),它只用于锁定目的.请考虑以下内容:我想编写一个接受集合的方法,以及一个将作为锁定对象的对象,以便该方法中的整个集合操作将在临界区内声明,该区域将被该给定对象锁定.

我应该使用"ref"传递该锁定对象还是传递该对象的引用副本就足够了?换句话说 - 因为lock语句仅用于引用类型,机制是否检查引用对象的值,还是检查指针的值?因为很明显,当传递一个没有"ref"的对象时,我实际上得到了一个引用的副本,而不是引用本身.

c# mutex locking sync

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

图表API - 获取最新的新闻Feed条目,而不是"热门新闻"

我正在为我的Web应用程序创建一个模块,该模块应该为特定用户显示最新的新闻订阅源条目.

我想知道是否可以在图表api url中添加某个"orderby"参数,以便获取"最新消息",而不是facebook的默认"热门新闻",它使用流行度和其他元素排列订单.

我目前正在使用以下网址:

https://graph.facebook.com/me/home?access_token=...&limit=10

但同样,这不会返回最新的条目.

有谁知道如何解决这个问题?

facebook facebook-graph-api

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

JDBC PreparedStatement - 使用相同的参数,是否可能?

我正在使用"插入或更新"查询,如下所示:

        String sql = 
            "INSERT INTO servlets (path, applicationId, startTime, numOfRequests, totalResponseTime, totalBytes)" +
            "VALUES (?, ?, NOW(), 1, ?, ?)" +
            "ON DUPLICATE KEY UPDATE numOfRequests = numOfRequests + 1, " +
            "totalResponseTime = totalResponseTime + ?, totalBytes = totalBytes + ?";
Run Code Online (Sandbox Code Playgroud)

我正在使用预准备语句,并以下列方式填充相关参数:

        statement = connection.prepareStatement(sql);
        statement.setString(1, i_ServletModel.GetPath());
        statement.setInt(2, i_ServletModel.GetApplicationId());
        statement.setLong(3, i_RequestStats.GetResponseTime());
        statement.setLong(4, i_RequestStats.GetBytes());
        statement.setLong(5, i_RequestStats.GetResponseTime());
        statement.setLong(6, i_RequestStats.GetBytes());
Run Code Online (Sandbox Code Playgroud)

请注意,参数3与参数5完全相同,参数4与参数6完全相同,因为它们在上面的查询中需要相同的值.

有什么我可以改变,无论是在查询中还是在参数填充方法中,以避免这种"丑陋"的语法?

java mysql jdbc

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